2017-06-10 106 views
0

我已經創建了一個小型的asp.net web窗體應用程序,來管理電子郵件,我創建了一個小界面,包含強制性的信息發送電子郵件,如從,到,主題等現在我想附加文件到電子郵件,我已經使用asp.net文件上傳控制器上傳文件, 並有附加多個文件,如何使用asp.net中的ajax調用來上傳文件?

Interface

現在我想背後發送此信息代碼,所以我想最好的辦法是使用ajax調用,因爲我不想刷新我的頁面,但我無法弄清楚如何將附加文件發送到服務器端, 我已閱讀一些文章,他們說我必須使用FormData發送的文件,然後 我創建了一個FormData對象和附加的所有附加的文件到object.but如何將這個對象傳遞給服務器端,如下 我的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); 
     } 
    }); 

} 

任何幫助?

回答

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";  
    }  

}  
} 
+0

有沒有使用通用處理器的任何替代辦法? – Roshan