asp.net - 如何使用 asp.net WebMethod 处理 FormData AJAX post(带有附加参数的文件)

标签 asp.net jquery asmx webmethod form-data

在处理 FormData 的 jQuery AJAX post 到 ASP.net 4 Web 服务 WebMethod 时遇到问题。

<input id="ipt_file" type="file" />
<a href='#' onclick="UploadFile();" data-role='button'>Upload</a>
<小时/>
var UploadFile = function () {
    var file_object = $('#ipt_file')[0].files[0];
    var form_data = new FormData();
    form_data.append('job_id', '123456');
    form_data.append('job_name', 'xyx');
    form_data.append('job_file', file_object);

    var xhr_upload = $.ajax({
        type: "POST",
        headers: { "Cache-Control":"no-cache", "Content-Type":"multipart/form-data" }, // also tried without these
        url: "../MyServices.asmx/Upload",
        data: form_data,
        processData: false,
        contentType: false,
        dataType: "json",
        success: function (msg) {
            if (typeof (msg) === "object") {
                var _upload = $.parseJSON(msg.d);
                alert(_upload.status + ': ' + _upload.msg);
            };
        }
    });
};
<小时/>
public class FileUploadRequest
{
    public string job_id { get; set; }
    public string job_name { get; set; }
    public HttpPostedFile job_file { get; set; }
}
<小时/>
[WebMethod]
public string Upload(FileUploadRequest x)
{
    string str_response = string.Empty;
    if (x.job_file.ContentLength > 0)
    {
        str_response = "{\"status\":1,\"msg\":\"" + x.job_id + ", " + x.job_name + ", " + x.job_file.FileName + "\"}";
    }
    else
    {
        str_response = "{\"status\":0,\"msg\":\"FAIL"\}";
    };
    return str_response;
}
<小时/>

不得正确处理 FormData 对象参数;这里我实例化了一个自定义类,但我从服务器返回的只是 500 个错误(还尝试了通用对象 x)。还尝试将其作为 HttpRequest 对象处理,正如我在一些帖子中看到的那样,但无济于事。在这种情况下不担心 IE 9 不兼容;只是想查看单个文件上传或至少一个具有由 asmx WebMethod 正确接收的键/值对的 FormData 对象。

最佳答案

我确实让它与以下代码一起工作,以防有人想看到它:

    var upload_file = $('#ipt_file')[0].files[0];
    var upload_filename = upload_file.name;
    var upload_maxsize = 10485760;
    var upload_projectname = "test";
    var form_data = new FormData();
    form_data.append('session_id', this.sessionID());
    form_data.append('project_name', upload_projectname);
    form_data.append('file_name', upload_filename);
    form_data.append('file_size', upload_file.size);
    form_data.append('file', upload_file);
    if (upload_file.size < upload_maxsize) {
    var xhr_upload = $.ajax({
        type: "POST",
        headers: { 'Cache-Control': 'no-cache' },
        url: "../services/upload.ashx",
        data: form_data,
        processData: false,
        contentType: false,
        dataType: "json"
        }
    })
    .done(function (xhr_data) {
        ...
    })
    .fail(function (jqXHR, textStatus, errorThrown) {
        ...
    })
    .always(function () {
        ...
    });

关于asp.net - 如何使用 asp.net WebMethod 处理 FormData AJAX post(带有附加参数的文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17888907/

相关文章:

.net - ASMX 操作 404s,但 ASMX 服务描述没有,url 路由问题?

android - 使用 Gson2.1 和 asmx web 服务在 Json 字符串中保留多态性

c# - 在 Asmx Web 服务单元测试中出错

javascript - ajax POST 调用不同域上的 Web API

javascript - 带有参数的 AJAX 调用不起作用

c# - Linq-to-SQL 帮助 - 选择重复行

javascript - 如何从 SEO 友好的 URL 获取查询字符串参数?

javascript - 禁用 Vanilla-tilt.js 的鼠标移动但保持陀螺仪效果

javascript - 单击打开 div 菜单并关闭 mouseleave 并单击

asp.net - 为什么图像在部署在本地 IIS 上的 ASP.NET 中处理不当