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