0

使用 MvcFileUploader 1.3.2 http://www.nuget.org/packages/MvcFileUploader/演示不会为我将上传的文件保存到服务器。

我正在使用VS2010。

复制创建一个新的 Web 项目并获取 nuget 包

PM> Install-Package MvcFileUploader

运行项目并导航到演示

http://localhost/MvcUploaderTest/Demo

使用控件上传文件,我使用的是小 jpg。您应该会看到返回的 JSON 结果。第一个条目是错误,我的看起来像这样。

 {"files":[{"error":null,...

检查上传目录,看看文件是否已上传。

~/Content/uploads/

应用程序或日志中没有错误或异常。任何人都可以让这个演示工作吗?

这看起来像是一个有用的包,它使用了一个不错的 jquery 文件上传器。它有一个剃须刀的 Html Helper,创建缩略图,您可以将上传的文件与实体相关联。我已经研究过使用http://backload.org/但它要重得多,而且配置似乎要多得多。

谢谢

编辑 这是返回的 JSON

{
"files": [{
    "error": null,
    "name": "C:\\MvcApplication2\\MvcApplication2\\Content\\txt.jpg",
    "size": 286054,
    "type": "image/bmp",
    "url": "/MvcUploaderTest/DownloadFile?fileUrl=/Content/uploads/C:\MvcApplication2\MvcApplication2\Content\txt.jpg\u0026mimetype=image/bmp",
    "delete_url": "/MvcUploaderTest/DeleteFile?entityId=1234\u0026fileUrl=/Content/uploads/C:\\MvcApplication2\\MvcApplication2\\Content\\txt.jpg",
    "thumbnail_url": "/Content/uploads/C:\\MvcApplication2\\MvcApplication2\\Content\\txt.jpg?width=80\u0026height=80",
    "delete_type": "POST",
    "FullPath": "C:\\MvcApplication2\\MvcApplication2\\Content\\uploads/C:\\MvcApplication2\\MvcApplication2\\Content\\txt.jpg",
    "SavedFileName": "C:\\MvcApplication2\\MvcApplication2\\Content\\txt.jpg",
    "Title": "txt"
}]

}

4

1 回答 1

1

看来您使用的是 IE8

问题是 Request.Files[0].FileName 给出了文件的完整路径,以防它从 IE8 发布。

Request.Files[0].FileName获取值C:\MvcApplication2\MvcApplication2\Content\txt.jpg

而包括 IE10 在内的所有现代浏览器只提供上传的文件名而没有路径。

Request.Files[0].FileName获取值txt.jpg

不确定 Mvc 框架是如何实现这个 HttpPostedFileBase.FileName 属性的。

由于 MvcFileUploader 使用此名称和 StorageDirectory 来保存在 IE8 情况下失败的文件。

使固定:

在 MvcUploaderTestController.UploadFile 更改此行

//overriding defaults
//x.FileName = Request.Files[i].FileName; //original
x.FileName = new FileInfo(Request.Files[i].FileName).Name;

这应该保存文件。

但是对于 IE8 也尝试下载从动作返回的 json 结果,结果总是显示进度。实际上 Blueimp 插件尝试使用 iframe 为 IE8 上传文件 https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation

您需要发送内容类型为 text/plain 且带有接受标头的响应

谢谢

于 2013-11-01T00:03:47.060 回答