javascript - 如何在 asp.net 中使用 ajax 调用上传文件?

标签 javascript c# asp.net ajax

我创建了一个小型的 asp.net web 表单应用程序来管理电子邮件,我创建了一个小界面,其中包含用于发送电子邮件的强制性信息,例如发件人、收件人、主题等。现在我想将文件附加到电子邮件中,我使用asp.net文件上传 Controller 上传文件, 并且必须附加多个文件,

Interface

现在我想将这些详细信息发送到代码后面,所以我认为最好的方法是使用 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);
        }
    });

}

有什么帮助吗?

最佳答案

你需要使用 Generic handler 来使用 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";      
    }    

}      
}   

关于javascript - 如何在 asp.net 中使用 ajax 调用上传文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44475698/

相关文章:

javascript - 我的应用程序在设备上运行缓慢是因为我使用的图像以及如何删除硬编码的宽度和高度

c# - 与 OutputCacheAttribute 交互

c# - 如何在 SQL Server 或 ASP.NET C# 中强制执行一定数量或范围的受影响行

C# 使用最大字体大小向图像添加字符串

javascript - telerik 编辑器困惑

javascript - 是否可以在 Tempus Dominus bootstrap 4 datetimepicker 中将 minDate 和 maxDate 设置为同一天?

javascript - 如何测试上下文菜单是否打开或显示?

c# - 使用 (Fluent-)NHibernate 持久化简单树会导致 System.InvalidCastException

c# - 验证电子邮件而不允许jquery中的空格

javascript - 如何将 src 的值放入输入然后将其显示在另一页上?