看板 C_Sharp 關於我們 聯絡資訊
各位好 我用的資料庫是Microsoft SQL Server 我用類似下面的語法可以把某筆image資料 下載成一個檔案 http://goo.gl/2bWGL4 但這樣每次只能下載一個檔案 請問 有辦法一次下載多筆嗎? 或者是一次下載多筆檔案所壓縮而成的zip檔 謝謝 --------------------------------------------------- byte[] xfile = null; string docupath = Request.PhysicalApplicationPath; xfile = wc.DownloadData(docupath + "uploads\\qrcode.png"); string xfileName = System.IO.Path.GetFileName (docupath + "uploads\\qrcode.png"); HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + HttpContext.Current.Server.UrlEncode(xfileName)); HttpContext.Current.Response.ContentType = "application/octet-stream"; //二進位方式 HttpContext.Current.Response.BinaryWrite(xfile); //內容轉出作檔案下載 HttpContext.Current.Response.End(); ---------------------------------------------------------------- 我後來使用DotNetZip來壓縮檔案 https://dotnetzip.codeplex.com/ 右邊是官方提供的一些 C# Examples https://goo.gl/FNjqug 作法大致如下 先宣告一個MemoryStream MemoryStream ms = new MemoryStream(); 再宣告一個ZipFile 透過AddEntry 把從資料庫撈出的檔案加進去ZipFile 接著用Save把壓縮檔存到一開始宣告的MemoryStream中 ZipFile zip = new ZipFile()); zip.AddEntry("檔名",stream或byte[]); // stream或byte[]就是從資料庫撈出的檔案 zip.Save(ms); 最後透過Response.BinaryWrite 把一開始宣告的MemoryStream下載下來 Response.BinaryWrite(ms.ToArray()); 以上供有相同問題的人參考 謝謝大家幫忙 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.127.81.14 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1463728684.A.825.html
VVll: 你可以把圖檔轉base64去存在DB內 存NoSQL也是不錯的選擇 05/21 03:22
VVll: 然後寫個WS去串連DB資料 最後你看你要取單張 還是多張壓縮 05/21 03:23
VVll: 當然你也可以不用這麼麻煩 直接先把圖檔都取出來放在記憶體 05/21 03:24
VVll: 然後再轉換後做壓縮 然後下載 05/21 03:25
kisha024: 謝謝 如果是後面那種做法 有程式碼範例可供我參考嗎? 05/21 17:23
kisha024: 或者是關鍵字 我再自己去google 05/21 17:25
ssccg: 你要先看懂你這段程式的意思,倒數第二行是把HttpResponse( 05/21 19:08
ssccg: 下載的檔案)存到xfile(實體檔案) 05/21 19:08
ssccg: ↑應該說用xfile寫入 05/21 19:11
ssccg: 所以你要下載一個zip就是你要先另外把多個實體檔案讀進 05/21 19:11
ssccg: memory,再做成一個壓縮檔,再拿來用就好了 05/21 19:12
ssccg: 至於怎麼把檔案從DB讀出來,那就要看你怎麼存、怎麼連了 05/21 19:16
※ 編輯: kisha024 (140.127.81.14), 06/09/2016 18:08:00