使用Dojo上传文件,使用xhr Post上传c#

时间:2014-04-05 19:23:18

标签: c# ajax asp.net-mvc-4 file-upload dojo

我正在尝试使用dojo / _base / xhr上传文件 这是代码:

 xhr.post({
                url: postUrl,
                handleAs: "text",
                contentType: "application/json",
                timeout: 10000,
                postData: dojo.toJson({ file: Uploader.files[0]}),
                load: function (result) {
                    show image...
                },
                error: function (err) {
                    show error...
                }
            });

当我尝试发送Uploader.files[0].size时,我会得到我应该得到的值,但是当我尝试发送Uploader.files[0]Uploader.files[0]时,我会得到空。

在服务器端:

[HttpPost]
public string UploadImg(string file)
{
`   Saving file
}

我尝试了一切!!但我无法设法获取文件本身。 Request.Files返回0个文件。提交表格不是一种选择,当我使用

 xhr.post({
                form: dom.byId("myform"),
                handleAs: "text",
                timeout: 10000,
                load: function (result) {
                    show image...
                },
                error: function (err) {
                    show error...
                }

Request.Files返回0

2 个答案:

答案 0 :(得分:1)

ajax不是crossbrowser文件异步上传的可行选项。你应该尝试使用该模块:

http://dojotoolkit.org/reference-guide/1.8/dojo/request/iframe.html

http://dojotoolkit.org/reference-guide/1.9/dojo/request/iframe.html

并让他们将您的表单提交给隐藏的iframe。

iframe(postUrl,{
  form: "theForm",
  handleAs: "text"
}).then(function(data){
  show image...
},function(err){
  show error...
});

请记住,如果您需要对返回的数据执行某些操作(并且不是html [就像在您的文本案例中那样]),您需要为响应执行此操作:

<html>
  <body>
    <textarea>
         data
    </textarea>
  </body>
</html>

答案 1 :(得分:0)

您可以尝试使用HttpPostedFileBase:

[HttpPost]
public string UploadImg(HttpPostedFileBase file) {
   //Save the file :
   if (file != null && file.ContentLength > 0) {
      file.SaveAs(path);
   }
}

请参阅this StackOverflow answerthis article


您也可以尝试删除dojo.toJson:

postData: { file: Uploader.files[0]}

而不是:

postData: dojo.toJson({ file: Uploader.files[0]})