将项目部署到登台时System.IO.FileNotFoundException在本地运行正常

时间:2016-06-06 05:58:50

标签: javascript c# ajax asmx webmethod

我们目前正在通过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);

现在我已经尝试在网上搜索给定的解决方案或详细解释为什么以及如何修复但无济于事,有人可以了解一下如果需要我需要改变以使其发挥作用正确。

提前致谢。

1 个答案:

答案 0 :(得分:1)

这在本地工作,因为客户端和服务器使用相同的文件系统和路径从$('#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);