【问题标题】:How to Upload Files using ajax call in asp.net?如何在 asp.net 中使用 ajax 调用上传文件?
【发布时间】:2017-11-12 12:41:08
【问题描述】:

我创建了一个小的 asp.net 网络表单应用程序来管理电子邮件,我创建了一个小界面,其中包含发送电子邮件的必填信息,例如 from 、 to 、主题等。现在我想将文件附加到电子邮件,我用asp.net文件上传控制器上传文件, 并且必须附加多个文件,

现在我想将此详细信息发送到代码后面,所以我认为最好的方法是使用 ajax 调用,因为我不想刷新我的页面,但我不知道如何发送附加文件到服务器端, 我读过一些文章,他们说我必须使用FormData 发送文件, 然后我创建了一个FormData 对象并将所有附加文件附加到该对象。但是如何将此对象传递到服务器端, 我的js代码如下,

function sendEmail() {

    var data = new FormData();
    var files = $('.attachment');
    $.each(files, function (key, value) {
        var file = $(value).data('file');
        data.append(file.name, file);
    });

    $.ajax({
        url: "OpenJobs.aspx/sendEmail",
        type: "POST",
        async: false,
        contentType: false, // Not to set any content header  
        processData: false, // Not to process data  
        data: null,
        success: function (result) {
            alert(result);
        },
        error: function (err) {
            alert(err.statusText);
        }
    });

}

有什么帮助吗?

【问题讨论】:

    标签: javascript c# asp.net ajax


    【解决方案1】:

    您需要使用通用处理程序来使用 ajax 上传文件,请尝试以下代码:

    function sendEmail() {
    
    var formData = new FormData();
    var files = $('.attachment');
    $.each(files, function (key, value) {
        var file = $(value).data('file');
        formData.append(file.name, file);
    });
    
    $.ajax({
        url: "FileUploadHandler.ashx",
        type: "POST",
        contentType: false, // Not to set any content header  
        processData: false, // Not to process data  
        data: formData,
        success: function (result) {
            alert(result);
        },
        error: function (err) {
            alert(err.statusText);
        }
    });
    }
    

    通用处理程序

    <%@ WebHandler Language="C#" Class="FileUploadHandler" %>    
    
    using System;    
    using System.Web;    
    
    public class FileUploadHandler : IHttpHandler  
    {    
    
    public void ProcessRequest (HttpContext context)  
    {    
        if (context.Request.Files.Count > 0)    
        {    
            HttpFileCollection files = context.Request.Files;    
            for (int i = 0; i < files.Count; i++)    
            {    
                HttpPostedFile file = files[i];    
                string fname = context.Server.MapPath("~/uploads/" + file.FileName);    
                file.SaveAs(fname);    
            }    
            context.Response.ContentType = "text/plain";      
        }    
    
    }      
    }   
    

    【讨论】:

    • 有没有不使用Generic Handler的替代方法?
    • 不幸的是不在这个阶段。尝试了在多个论坛上提出的各种建议。最后,通用事件处理程序正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    相关资源
    最近更新 更多