我们目前正在通过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);
现在我已经尝试在网上搜索给定的解决方案或详细解释为什么以及如何修复但无济于事,有人可以了解一下如果需要我需要改变以使其发挥作用正确。
提前致谢。
答案 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);