通过Ajax上传的文件未在MVC中的请求中附加文件

通过Ajax上传的文件未在MVC中的请求中附加文件,第1张

通过Ajax上传的文件未在MVC中的请求中附加文件

代替:

$.each($(fileInput).get(0).files, function (index, value) {    formdata.append($(this).attr('name'), $(this));});

您可以使用:

$.each($(fileInput).get(0).files, function (index, value) {    formdata.append(value.name, value);});

主要区别在于,使用您的方法,Content-Disposition部分不包含

filename
,因此ASP.NET无法将其识别为文件内容:

------WebKitFormBoundaryZxwCwBC0O8Q3hOAOContent-Disposition: form-data; name="foo.png"[object Object]------WebKitFormBoundaryZxwCwBC0O8Q3hOAOContent-Disposition: form-data; name="bar.png"[object Object]------WebKitFormBoundaryZxwCwBC0O8Q3hOAO--

用我的方法,请求将如下所示:

------WebKitFormBoundary1ERBVX0wzdVczcR0Content-Disposition: form-data; name="foo.png"; filename="foo.png"Content-Type: imag/png[object Object]------WebKitFormBoundary1ERBVX0wzdVczcR0Content-Disposition: form-data; name="bar.png"; filename="bar.png"Content-Type: image/png[object Object]------WebKitFormBoundary1ERBVX0wzdVczcR0--

现在您可以看到实际的差异。在第一种情况下,您将没有文件

filename
Content-Type
文件,ASP.NET只会将这些元素视为标准表单发布的数据,而不是文件。

另外,不要使用实际的文件名

name
而是可以考虑将其替换为一些通用的文件名:

$.each($(fileInput).get(0).files, function (index, value) {    formdata.append('sliderFiles', value);});

现在,您可以通过采用

List<HttpPostedFilebase>
参数而不是使用来进一步改善控制器 *** 作
Request.Files

[HttpPost]public ActionResult UploadSlider(List<HttpPostedFilebase> sliderFiles){    ...}

关于您的代码的另一句话是,HTML5

FormData
在订购浏览器中不可用,并且您的代码将自动失败。如果您需要支持较旧的浏览器,则可能需要通过测试浏览器的功能来执行渐进式增强,如果浏览器不支持FormData,则退回到标准表格POST:

$("#" + form).on("submit", function (e) {    if(window.FormData === undefined) {        // The browser doesn't support uploading files with AJAX        // falling back to standard form upload    } else {        // The browser supports uploading files with AJAX =>        // we prevent the default form POST and use AJAX instead        e.preventDefault();        ...    }});


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5642509.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存