Jquery Ajax實現檔案下載執行個體代碼

來源:互聯網
上載者:User

考慮可以使用jquery ajax提交form請求的方式。

jquery download函數:

 代碼如下 複製代碼
// Ajax 檔案下載
    jQuery.download = function (url, data, method) {
// 擷取url和data
if (url && data) {
    // data 是 string 或者 array/object
    data = typeof data == 'string' ? data : jQuery.param(data);
    // 把參數組裝成 form的  input
    var inputs = '';
    jQuery.each(data.split('&'), function () {
var pair = this.split('=');
inputs += '<input type="hidden" name="' + pair[0] + '" value="' + pair[1] + '" />';
    });
    // request發送請求
    jQuery('<form action="' + url + '" method="' + (method || 'post') + '">' + inputs + '</form>')
.appendTo('body').submit().remove();
};
    };

用jquery的方式組織一個字串,類比提交一個form請求。

也就是動態渲染表單,提交表單後再刪除。


html的圖片代碼:

 代碼如下 複製代碼


<img onclick="GetSrcFromSvc('" + name + "')" src="" + imgurl + "" //>
GetSrcFromSvc函數實現調用:


 $.download("http://localhost:2204/wx/Default.aspx", "img=" + url, 'post');

asp.net伺服器端代碼:aspx檔案:

微軟為Response對象提供了一個新的方法TransmitFile來解決使用Response.BinaryWrite下載超過
 400mb的檔案時導致Aspnet_wp.exe進程回收而無法成功下載的問題。  ///指定被輸出映像的地址
 

 代碼如下 複製代碼
string imgurl = Request.Form["img"];
string FileName = Server.MapPath(imgurl);
//   System.Drawing.Image img = System.Drawing.Image.FromFile(imgurl);
//   MemoryStream ms = new System.IO.MemoryStream();
//   img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
//   img.Dispose();
//   context.Response.ClearContent();
//   context.Response.ContentType = "image/jpg";
//   context.Response.BinaryWrite(ms.ToArray());
//   //context.htm = htm&File(FileName);
//   ////??uffer 中的stream全部送出
//    context.Response.Flush();
////   context.Response.End();
string filePath = Server.MapPath(imgurl);//路徑
if (File.Exists(filePath))
{
    FileInfo fileinfoo = new FileInfo(filePath);
    Response.ContentType = "application/x-zip-compressed";
    Response.AddHeader("Content-Disposition", "attachment;filename=" + fileinfoo.Name + "");
    Response.TransmitFile(filePath);
}
else
{
    htm = htm&("未找到檔案。");
}

asp.net 流方式下載:

 代碼如下 複製代碼
string imgurl = Request.Form["img"];
string FileName = Server.MapPath(imgurl);
if (File.Exists(FileName))
{
    FileInfo fileinfoo = new FileInfo(FileName);
    //以字元流的形式下載檔案
    FileStream fs = new FileStream(FileName, FileMode.Open);
    byte[] bytes = new byte[(int)fs.Length];
    fs.Read(bytes, 0, bytes.Length);
    fs.Close();
    Response.ContentType = "application/octet-stream";
    //通知瀏覽器下載檔案而不是開啟
    Response.AddHeader("Content-Disposition", "attachment;   filename=" + HttpUtility.UrlEncode(fileinfoo.Name, System.Text.Encoding.UTF8));
    Response.BinaryWrite(bytes);
    Response.Flush();
    Response.End();
}

測試環境:

win7+IE9 IE10 。手機端:uc。

其他瀏覽器無法預計效果。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.