使用 AJAX 上传文件有时会失败,并在服务器上显示 0 字节,在大多数情况下它工作正常



我正在使用简单的jquery ajax上传文件。 在大多数情况下,它工作正常,但有时会失败,并在服务器上显示 0 字节文件大小。谁能帮我为什么会这样..我的 Ajax 代码是:

var formData = new FormData();

formData.append("emailId", "dilshad@gmail.com");
formData.append("file1", $('#fileCtrlId')[0].files[0], $('#fileCtrlId')[0].files[0].name);
$.ajax({
                async: true,
                type: "POST",
                url: "/fileupload.ashx",
                data: formData,
                processData: false,
                contentType: false,
                timeout: 300000, //5min
                success: function (data) {
                   alert("success");
                },
                error: function (response) {
                     alert("Error");
                    }
                },
                failure: function (response) {
                    alert("failure");
                    }
                }
            });

将文件保存到磁盘的处理程序代码是:

               if (!string.IsNullOrEmpty(context.Request.Params["emailid"]))
                            {
                              var emailId = context.Request.Params["emailId"];
                            }
int fileLength = HttpContext.Current.Request.Files[0].ContentLength;
                                    byte[] fileBytes = new byte[fileLength];
                                    context.Request.Files[0].InputStream.Read(fileBytes, 0, fileLength);
 using (var fileStream = new System.IO.FileStream("filepath", System.IO.FileMode.Create))
                    {
                        using (var buffer = new System.IO.BinaryWriter(fileStream))
                        {
                            buffer.Write(fileBytes);
                            buffer.Close();
                        }
                        fileStream.Close();
                    }

我已经解决了这个问题。实际上,问题出在我们允许http动词方法的服务器端。在创建 COR 策略时,我们只使用允许的方法字符串数组,例如

字符串[] {"放置", "发布", "删除", "选项", "获取"}

但不幸的是,IE不理解它,它采用逗号分隔的方法名称。

因此,我们将其更改为新的

字符串[] {"PUT, POST, DELETE, OPTIONS, GET"}

它开始工作。

最新更新