日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【原】Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)...

發布時間:2024/9/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【原】Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這里采用的是在服務端先生成Excel文件,然后利用文件地址下載的方法。

生成Excel文件的方法,見:【原】.Net創建Excel文件(插入數據、修改格式、生成圖表)的方法

先試用Response.WriteFile的方法:

FileInfo fi = new FileInfo(excelFile);//excelFile為文件在服務器上的地址 HttpResponse contextResponse = HttpContext.Current.Response; contextResponse.Clear(); contextResponse.Buffer = true; contextResponse.Charset = "GB2312"; //設置了類型為中文防止亂碼的出現 contextResponse.AppendHeader("Content-Disposition", String.Format("attachment;filename={0}", excelName)); //定義輸出文件和文件名 contextResponse.AppendHeader("Content-Length", fi.Length.ToString()); contextResponse.ContentEncoding = Encoding.Default; contextResponse.ContentType = "application/ms-excel";//設置輸出文件類型為excel文件。 contextResponse.WriteFile(fi.FullName); contextResponse.Flush(); contextResponse.End();

其中第一行的excelFile為Excel文件在服務器上的地址,比如:“C:\Website\Excel\xx.xlsx”。

這種方法也是網上一般提供的方法,但在實際操作中,卻出現了意向不到的問題:

在Chrome下

一切正常,Excel文件直接下載到Chrome的默認下載文件夾中。

在Firefox下

由于安裝了FlashGot插件,會先選擇應用的下載工具:

在這里顯示是正常的,如果選擇“保存文件”,Excel文件也會被保存到默認文件夾中,但如果試用第三方下載工具,比如迅雷,會出現如下窗口:

注意到網址一欄,會在頁面實際地址后添加ViewState信息,而另存名稱也不是Excel文件本身的名稱,而是頁面的名稱。

點擊確定后,被下載的文件又變成了實際文件(有時會先變成.zip文件,再變為實際文件)

在IE7下

會先彈出保存對話框,文件正常,同樣因為裝了迅雷的緣故,點保存時,彈出迅雷的下載對話框,和Firefox下不同,網址后面沒有ViewState信息。

點確定,下載的則是頁面文件:

如果在迅雷的下載對話框中點取消,則會使用IE的下載,這里的文件又是正確的了:

懷疑迅雷是根據下載對話框中的網址重新請求下載,與發起請求的頁面已經無關,而IE又不會把ViewState信息傳到迅雷中,導致下載的文件不是想要的Excel頁面。

之后又嘗試了分段下載的方式,其實也是無效的,因為迅雷根本不理會你提供給它的下載機制,而且這樣在Firefox下調用迅雷時,由于分段下載的Viewstate并不包含Excel文件的完整信息,迅雷下載下的也是殘缺的文件。

最后只能采用最老土的解決方法:Response.Redirect(),轉向實際文件地址。

FileInfo fi = new FileInfo(excelFile); HttpResponse contextResponse = HttpContext.Current.Response; contextResponse.Redirect(string.Format("~/Template/{0}", excelName), false);

這樣在三個瀏覽器下測試都正常了,因為請求的是實際文件的地址,在迅雷中顯示的也是實際文件的地址。下載就不會出現問題。但這樣相當于告知客戶端用戶文件的實際地址,隱私性不佳。但好在這里并不需要太好的隱私性,而且文件會在一定時間之后刪除,所以倒并不是太大的問題了。

上面是第一次考慮的結果,似乎還是有些懶了……

事后考慮,既然每次迅雷實際都是重新請求URL,那么我們就應該給迅雷傳入一個能生成Excel文件的URL。

即,在點擊“生成Excel”按鈕的時候,轉向另一個Export頁面,在這個頁面的Page_Load方法中完成生成Excel文件、下載Excel文件的步驟。

String fileName = Request.QueryString["FileName"]; String exportName = Request.QueryString["Export"]; if(fileName != null) {ExportManger.CreateExcel(fileName);//先在服務器端創建Excel文件。Response.Redirect(String.Format("{0}?Export={1}",Request.Path.ToString(),fileName));//重定向到本頁面,但Query參數變為Export。 } else if(exportName != null) {ExportManger.ExportExcel(exportName);//下載Excel文件。 }

這里頁面跳轉了兩次,第一次是生成Excel,第二次是下載Excel。

之所以跳轉兩次,是因為迅雷會捕獲最后的URL,如果生成和下載放在一起進行,那么迅雷下載時會重復再生成一遍Excel文件。下載Excel文件的代碼ExportManger.ExportExcel(exportName)就使用了本文開頭介紹的Response.Write方法,也可以用分段下載的方法:

if(fi.Length > 0) {FileStream sr = new FileStream(fi.FullName,System.IO.FileMode.Open,System.IO.FileAccess.Read, System.IO.FileShare.Read);int size = 1024;//設置每次讀取長度。for (int i = 0; i < fi.Length / size + 1; i++){byte[] buffer = new byte[size];int length = sr.Read(buffer, 0, size);contextResponse.OutputStream.Write(buffer, 0, length);}sr.Close(); } else {contextResponse.WriteFile(fi.FullName); }

這里的結果是只生成了一次Excel并在服務器保留,以后每次下載的時候都使用帶"Export"的參數下載相同的文件。那么如果需要文件只是一次性的,每次下載都需要重新生成,則只需要把Export頁面的下載和生成放到一起。然后把開頭的Response.Write方法最后變成:

contextResponse.Flush(); fi.Delete(); contextResponse.End(); 即每次響應清空后把文件先刪除,再結束響應。

這樣就解決了利用下載工具出現的下載不能的問題,同時保護了服務器文件地址的隱私,并可以采用分段寫入的方法寫入大文件,而且可以按需要即時刪除生成的文件而不占用服務器空間。

總結

以上是生活随笔為你收集整理的【原】Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费黄色网页 | 无码人妻aⅴ一区二区三区有奶水 | 久久久久久少妇 | 一区二区三区色 | av激情小说| 一区在线不卡 | 在线观看av不卡 | 91激情网 | 五月天婷婷在线视频 | 国产免费无遮挡吸奶头视频 | 国产精品视频一区二区三区 | 亚洲一区和二区 | 在线一区二区不卡 | 日韩3p | 亚洲午夜免费 | 中文字幕高清在线播放 | 国产一卡二卡三卡 | 欧美在线免费播放 | 伊人青青久 | 视频丨9l丨白浆 | 日韩av网页 | 国产天天综合 | 波多野结衣大片 | 亚洲精品一区二区口爆 | 日日干日日爽 | 无罩大乳的熟妇正在播放 | 久久久久99人妻一区二区三区 | 国产亚洲精品久久久久婷婷瑜伽 | 久视频在线观看 | 亚洲色图偷拍视频 | 久久精品国产99久久 | 成人在线免费小视频 | 国产精品精品视频 | 理论片中文字幕 | 免费在线观看黄色网址 | 日韩久久一区二区三区 | 三级91| 少女情窦初开的第4集在线观看 | 69re视频| 制服丝袜国产在线 | 在线国产网站 | 精品三级 | 国产色无码精品视频国产 | 欧美大片免费在线观看 | 欧美成人aaa片一区国产精品 | 国产免费a级片 | 活大器粗np高h一女多夫 | 欧美精品1 | 色天天av | 日韩裸体视频 | 中文字幕一区日韩 | 国产亚洲综合在线 | 老鸭窝av在线 | 亚洲妇女体内精汇编 | 99热免费在线观看 | 日韩av免费在线播放 | 日日夜夜艹 | 成人福利在线播放 | 日韩av在线播 | 中文字幕乱码一区二区三区 | 91视频最新入口 | 久久av一区二区三区亚洲 | 免费精品在线观看 | 精品欧美久久久 | 95久久 | 在线免费黄色网 | 亚洲欧美一级 | 日韩一区免费视频 | 国产人人爽 | 日韩欧洲亚洲 | 欧美精品一区二区三区在线 | 黄色动漫在线观看 | 中文字幕在线日本 | 国产 日韩 欧美 综合 | 亚洲av不卡一区二区 | 波多野结衣一区二区三区四区 | 美女在线网站 | 国产亚洲网站 | 深夜在线视频 | 国产高清自拍视频 | 亚洲一区欧美日韩 | 久久加勒比| 白石茉莉奈黑人 | 国产午夜精品福利视频 | 最新理伦片eeuss影院 | 日本亚洲色大成网站www久久 | 免费成人深夜夜视频 | www日韩精品| 六月激情| 伊人黄网 | 国产视频二 | 色呦呦在线观看视频 | 亚洲免费看黄 | 天天做天天爱 | 夜色视频网 | 精品国产精品 | 初高中福利视频网站 | 美女黄色av | 欧美性受xxxx黒人xyx性爽 |