使用jquery

时间:2017-02-24 19:06:37

标签: jquery ajax

我想将图像发送到网络方法。用户首先选择图像,然后点击提交按钮。我正在使用

<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?

谢谢。

0 个答案:

没有答案