推 kisha024: 謝謝 05/30 00:35
之前寫過從DB撈檔案後用7z壓縮
然後把壓縮後的stream丟到網頁給使用者下載
使用的lib叫"SharpZipLib"
缺點就是要把7z的dll檔丟進去專案資料夾內
(可能可以用nuget,但是當時沒這樣處理)
大致上如下:
------------- 懶得幫code上色了0rz ------------
// dllPath就是對應到7z.dll的絕對位置
// 可能會長這個樣子:"c:/project/wwwroot/7z.dll"
// 要考慮到如果是在x64的環境下,要用7zx64.dll
var memoryStream = new MemoryStream();
SevenZipBase.SetLibraryPath(dllPath);
var zipCompressor = new SevenZipCompressor
{
ArchiveFormat = OutArchiveFormat.SevenZip,
CompressionMode = CompressionMode.Create,
DirectoryStructure = false
};
var dictForComporess = new Dictionary<string, Stream>();
// dbFiles是已經從db讀出來的List<自訂類別DbFile>
dbFiles.ForEach(file =>
{
// file.FileContent是byte[]
var stream = new MemoryStream(file.FileContent);
dictForComporess.Add(file.FileName, stream);
});
zipCompressor.CompressStreamDictionary(dictForComporess, memoryStream);
----------- 我是分隔線 ---------
當初有試過用.net內建(還是windows內建的?)的zip lib
但是QA(使用Mac)反應:解開後檔名是亂碼
所以後來改成用7z打包
以上,給您參考
也請各位前輩先進能給予指點<(_ _)>
※ 編輯: J002 (118.165.31.108), 05/23/2016 22:43:17
※ 編輯: J002 (118.165.31.108), 05/23/2016 22:50:09