我想将图像发送到网络方法。用户首先选择图像,然后点击提交按钮。我正在使用
<input type=file id="btnUpload" />
然后我将输入控件中的文件放入数组
// declare outside of event
var files = {}
// inside btnUpload change event
files.push({ content: file, fileName: file.name });
和我传递给网络方法的对象是
public class PostedFiles {
public HttpPostedFile PostedFile { get; set; }
public int inspectorId { get; set; }
public int inspectionId { get; set; }
}
webmethod的签名是
[WebMethod]
public static string UploadFile(PostedFiles postedFiles)
jquery代码
$('#btnUpload).click(function () {
var data = {
PostedFiles: files[0].content
inspectorId: 5,
inspectionId: 7
};
$.ajax({
type: "POST",
url: "../Default.aspx/UploadFile",
data: JSON.stringify({ postedFiles: data }),
dataType: "text",
contentType: "application/json; charset=utf-8",
success: function (response) {
if (response.status === "error") {
alert('Successful Error!!');
}
else {
alert('Did it!!');
}
},
failure: function (response) {
alert('FAILED');
},
error: function (response) {
alert('ERROR');
}
});
});
我在这个例子中只发送了一个图像,但我的目标是发送一个图像数组 - 或者HttpPostedFile [] - 但是由于filereader工作异步,我不知道如何制作一个处理多个文件读取器异步调用时调用ajax。
如果我注释掉所有文件部分,则webmethod称为属性。我已经在ajax调用之前检查了数据并且已经填充了该文件。我发现在上传之前使用FileReader转换文件的文章,但我无法弄清楚如何做到这一点,因为FileReader是异步工作的(我不想做转换直到btnUpload事件被解雇了)。我确实设法使用reader.ReadAsArrayBuffer并将其放入files []数组中,但无法弄清楚该类型应该在PostedFile.content属性上应该是什么。我尝试过string,string []和byte []。
有没有人知道如何通过ajax调用将图像文件(或任何其他文件)传递给WebMethod?
谢谢。