tot*_*oro 2 c# asp.net-mvc stream dotnetzip
我在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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用流获得流
WebClient client = new WebClient();
Stream fs = client.OpenRead(url);
Run Code Online (Sandbox Code Playgroud)
但是,我得到以下异常
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)
Run Code Online (Sandbox Code Playgroud)
在服务器端(ASP.NET MVC 4),返回FilePathResult或FileStreamResult两者都导致此异常.
我应该在客户端获得不同的流吗?或者如何让服务器返回"可搜索"流?谢谢!
你必须将数据下载到文件或内存中,然后创建一个FileStream或一个MemoryStream,或其他一些流是支持寻求型.例如:
WebClient client = new WebClient();
client.DownloadFile(url, filename);
using (var fs = File.OpenRead(filename))
{
unzipFromStream(fs, outdir);
}
File.Delete(filename);
Run Code Online (Sandbox Code Playgroud)
或者,如果数据适合内存:
byte[] data = client.DownloadData(url);
using (var fs = new MemoryStream(data))
{
unzipFromStream(fs, outdir);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1147 次 |
| 最近记录: |