我们目前正在通过WebMethod将照片上传到javascript在本地上一切正常。

但是,当我将其部署到暂存区时,会出现以下异常:System.IO.FileNotFoundException我们的javascript方法如下:

   var formData = new FormData();
   formData.append('file', $('#photo')[0].files[0]); // Image
   formData.append('c', i);
   formData.append('t', t);
   formData.append('i', uuid);

      $.ajax({
          url: "/member/myserice/test.asmx/UploadImage",
          type: "POST",
          processData: false,
          contentType: false,
          data: formData,
          success: function (response) {
              alert('success');
          },
          error: function (er) {
            alert('Unable to upload photo at this time, please try again later');
          }
        });


现在,您可以看到我们将上传的图像存储在formData(第一个参数)中

我们的WebMethod如下:

  public string UploadImage()
  {

        var httpRequest = HttpContext.Current.Request;

        var timestamp = httpRequest.Form["t"];
        var consumerId = httpRequest.Form["c"];
        var guid = httpRequest.Form["i"];
        var pic = System.Web.HttpContext.Current.Request.Files["file"];

        string fileName = Path.GetFileName(pic.FileName); // Breaks here when deployed to staging

        var img = System.Drawing.Image.FromFile(pic.FileName);

       //Removed additional code as it calls an external API.

  }


现在,如前所述,这在本地环境上工作得很好,但是在部署到暂存区时,在以下行中出现异常System.IO.FileNotFoundException

  string fileName = Path.GetFileName(pic.FileName);


现在,我已经尝试在网络上搜索给定的解决方案或详细的解释,以了解为什么以及如何修复,但无济于事,如果有人需要我进行更改以使其正常工作,是否可以向我们提供一些启示。

提前致谢。

最佳答案

这在本地有效,因为客户端和服务器都使用相同的文件系统,并且从$('#photo')[0].files[0]指向服务器上相同文件的路径。您不应尝试从服务器端的文件系统中读取文件,而应使用HttpContext中的文件流



代替

    var pic = System.Web.HttpContext.Current.Request.Files["file"];
    string fileName = Path.GetFileName(pic.FileName); // Breaks here when deployed to staging
    var img = System.Drawing.Image.FromFile(pic.FileName);


使用从客户端上传的文件流:

var pic = System.Web.HttpContext.Current.Request.Files["file"];
var img = System.Drawing.Image.FromStream(pic.InputStream);

09-25 21:06