从 HttpPostedFileBase 获取文件路径

Posted

技术标签:

【中文标题】从 HttpPostedFileBase 获取文件路径【英文标题】:Getting the file path from HttpPostedFileBase 【发布时间】:2013-07-26 11:17:55 【问题描述】:

我正在使用 ASP.NET MVC 4,我正在尝试获取上传文件的路径以便打开和操作它。我就是这样进行的:

控制器

public ActionResult Bulk(HttpPostedFileBase file)

    FileStream fs = System.IO.File.Open(Server.MapPath(file.FileName), 
                                         FileMode.Open, FileAccess.Read);

    return RedirectToAction("Index");

查看

@
    ViewBag.Title = "Index";


<h2>Index</h2>

    @using (html.BeginForm("Bulk", "Bulk", null, FormMethod.Post, new 
                                           enctype = "multipart/form-data" ))
    
        @Html.ValidationSummary(true)

        <fieldset>
            <p>
                <input type="file" name="file"/>
            </p>
            <div class="form-actions">
              <button type="submit" class="btn btn-primary">Create</button>
            </div>
        </fieldset>
    

当我这样做时,我收到一条错误消息... Could not find a part of the path ...

如何获取文件实际所在的路径?

【问题讨论】:

【参考方案1】:

据我了解,您需要在打开文件之前将文件上传到服务器,例如

 if (file != null && file.ContentLength > 0) 
    
        // extract only the fielname
        var fileName = Path.GetFileName(file.FileName);
        // store the file inside ~/App_Data/uploads folder
        var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
        file.SaveAs(path);
    

我从 Chance 和 Darin Dimitrov 的类似问题的回答中摘录了上述内容 :File Upload ASP.NET MVC 3.0

此答案还引用了有用的博客文章Uploading a File (Or Files) With ASP.NET MVC

【讨论】:

感谢您的回答!我现在就试试,然后告诉你。 当程序到达 SaveAs 方法时,我得到这个错误:找不到路径的一部分 'C:\Users\maab\Desktop\2013-05-10_BuSI Material Project - 最后\BuSIMaterial\BuSIMaterial\App_Data\uploads\List_2013.xlsx'。 如果您在本地运行时发生此错误 - 您是否在 App_Data 中创建了上传文件夹?如果在您发布时发生这种情况,您可能需要调整发布设置(右键单击您的项目-> 使用解决方案资源管理器的属性)并在“打包/发布”下检查它是否部署了此项目文件夹中的所有文件)。除此之外,您可能需要在 IIS 中提供上传文件夹的权限。 traffy im 面临与 htttpostedfile 路径相同的问题您找到任何解决方案了吗?【参考方案2】:

因为我没有足够的声誉,所以无法发表评论...... :(

文件夹...

C:\Users\maab\Desktop\2013-05-10_BuSI Material Project -Last\BuSIMaterial\BuSIMaterial\App_Data\uploads

存在吗?如果没有,请尝试手动创建并再次尝试上传。

【讨论】:

以上是关于从 HttpPostedFileBase 获取文件路径的主要内容,如果未能解决你的问题,请参考以下文章

我无法在操作方法中将我的文件传递给 httppostedfilebase

ASP MVC 文件上传 HttpPostedFileBase 为空

如何更改 httppostedfilebase 的内容类型?

当通过ajax mvc上传文件HttpPostedFileBase时返回null

重写HttpPostedFileBase 图片压缩

无法将 HttpPostedFileBase 保存到会话变量并使用两次