簡體   English   中英

DotNetZip失敗,並顯示“流不支持搜索操作”

[英]DotNetZip fails with “stream does not support seek operations”

我在C#中使用DotNetZip從流中解壓縮,如下所示:

public static void unzipFromStream(Stream stream, string outdir)
{   //omit try catch block
    using (ZipFile zip = ZipFile.Read(stream)){
        foreach (ZipEntry e in zip){
            e.Extract(outdir, ExtractExistingFileAction.OverwriteSilently);
        }
    }
}

流是使用獲得的

WebClient client = new WebClient();
Stream fs = client.OpenRead(url);

但是,我遇到了以下異常

exception during extracting zip from stream System.NotSupportedException: This stream does not support seek operations.
at System.Net.ConnectStream.get_Position()
at Ionic.Zip.ZipFile.Read(Stream zipStream, TextWriter statusMessageWriter, Encoding encoding, EventHandler`1 readProgress)

在服務器端(ASP.NET MVC 4),返回FilePathResultFileStreamResult均導致此異常。

我應該在客戶端以不同的方式獲取流嗎? 或者如何使服務器返回“可搜索”流? 謝謝!

您必須將數據下載到文件或內存中,然后創建FileStreamMemoryStream或其他支持查找的流類型。 例如:

WebClient client = new WebClient();
client.DownloadFile(url, filename);
using (var fs = File.OpenRead(filename))
{
    unzipFromStream(fs, outdir);
}
File.Delete(filename);

或者,如果數據適合內存:

byte[] data = client.DownloadData(url);
using (var fs = new MemoryStream(data))
{
    unzipFromStream(fs, outdir);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM