Di errore in Windows Azure durante il caricamento di un file zip: “ZipException è stata gestita” “EOF nell'intestazione”

StackOverflow https://stackoverflow.com/questions/2547481

  •  23-09-2019
  •  | 
  •  

Domanda

Sto usando Windows Azure per creare un sistema di gestione dei documenti, e le cose sono andate bene finora. Sono stato in grado di caricare e scaricare file per l'archiviazione BLOB tramite un front end asp.net.

Quello che sto cercando di fare ora è consentire agli utenti di caricare un file .zip, e poi prendere le file fuori che .zip e salvarle come singoli file. Il problema è, sto diventando "ZipException è stata gestita" "EOF nell'intestazione" e io non so perché.

Sto usando la libreria ICSharpCode.SharpZipLib, che ho usato per molti altri compiti e la sua grande funzionato.

Ecco il codice di base:

CloudBlob ZipFile = container.GetBlobReference(blobURI);
MemoryStream MemStream = new MemoryStream();
ZipFile.DownloadToStream(MemStream);
....
while ((theEntry = zipInput.GetNextEntry()) != null)

ed è sulla linea che inizia con po 'che ottengo l'errore. Ho aggiunto una durata del sonno di 10 secondi solo per assicurarsi che il tempo era passato.

MemStream ha una lunghezza, se metto a punto, ma lo zipInput fa a volte, ma non sempre. Non riesce sempre.

È stato utile?

Soluzione

Solo una supposizione casuale, ma avete bisogno di cercare il flusso di nuovo a 0 prima che hai letto? Non sono sicuro se si sta facendo che già (o se è necessario).

Altri suggerimenti

@Smarx suggerimento ha fatto il trucco anche per me. La chiave per evitare file vuoti all'interno della zip è per impostare la posizione di zero. Per motivi di chiarezza qui è codice di esempio che fa uno zip-corrente contenente un blob Azure al browser.

        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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top