Windowsのアズールでのエラーは、zipファイルをアップロードする場合:ヘッダーに「EOF「を持つZipExceptionが未処理されました」」
-
23-09-2019 - |
質問
私は、文書管理システムを作成するには、Windows Azureのを使用してきた、との事は今のところうまく行っています。私はasp.netのフロントエンドを通じてBLOBストレージにファイルをアップロードおよびダウンロードすることができました。
私は今何しようとしてることは、ユーザーが.zipファイルをアップロードし、その.zipファイルからファイルを取り、個々のファイルとして保存することができます。問題は、私は、ヘッダーで「EOF」「持つZipExceptionが未処理された」そうだと私はなぜか、です。
私は、他の多くのタスクとその加工した偉大なのために使用してきたICSharpCode.SharpZipLibライブラリを使用しています。
ここでは基本的なコードです
CloudBlob ZipFile = container.GetBlobReference(blobURI);
MemoryStream MemStream = new MemoryStream();
ZipFile.DownloadToStream(MemStream);
....
while ((theEntry = zipInput.GetNextEntry()) != null)
と、それは私がエラーを取得しながら、で始まっていることというの行にあります。私は十分な時間がによって行っていたことを確認するために10秒の睡眠時間を追加しました。
常にではないが、MemStreamは、私はそれをデバッグする場合は、長さを持っていますが、zipInputは時々ありません。それは常に失敗します。
解決
ただ、ランダムな推測が、あなたは、あなたがそれを読む前に0にストリームバックを模索する必要がありますか?わからないあなたはすでにそれをやっている場合(またはそれが必要の場合)。
他のヒント
@Smarxヒントは、あまりにも私のためのトリックを行いました。 ZIP内の空のファイルを回避するための鍵は、ゼロに位置を設定することです。明確にするために、ここでブラウザへAzureのブロブを含むzipストリームを送信するサンプルコードです。
var fs1 = new MemoryStream();
Container.GetBlobReference(blobUri).DownloadToStream(fs1);
fs1.Position = 0;
var outputMemStream = new MemoryStream();
var zipStream = new ZipOutputStream(outputMemStream);
var entry1 = new ZipEntry(fileName);
zipStream.PutNextEntry(entry1);
StreamUtils.Copy(fs1, zipStream, new byte[4096]);
zipStream.CloseEntry();
zipStream.IsStreamOwner = false; // False stops the Close also Closing the underlying stream.
zipStream.Close(); // Must finish the ZipOutputStream before using outputMemStream.
outputMemStream.Position = 0;
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment;filename=" + zipFileName);
Response.OutputStream.Write(outputMemStream.ToArray(), 0, outputMemStream.ToArray().Length);
Response.End();
所属していません StackOverflow