socket servidor redes recibir programacion por funcion enviar datos crear como cliente archivos c# .net ftp zip streamreader

redes - El archivo Zip se corrompe después de descargarlo del servidor en C#



socket cliente-servidor en c linux (3)

Use BinaryWriter y páselo FileStream.

//This part of the code is used to write the read content from the server using (var destinationStream = new BinaryWriter(new FileStream(toFilenameToWrite, FileMode.Create))) { long length = response.ContentLength; int bufferSize = 2048; int readCount; byte[] buffer = new byte[2048]; readCount = responseStream.Read(buffer, 0, bufferSize); while (readCount > 0) { destinationStream.Write(buffer, 0, readCount); readCount = responseStream.Read(buffer, 0, bufferSize); } }

request = MakeConnection(uri, WebRequestMethods.Ftp.DownloadFile, username, password); response = (FtpWebResponse)request.GetResponse(); Stream responseStream = response.GetResponseStream(); //This part of the code is used to write the read content from the server using (StreamReader responseReader = new StreamReader(responseStream)) { using (var destinationStream = new FileStream(toFilenameToWrite, FileMode.Create)) { byte[] fileContents = Encoding.UTF8.GetBytes(responseReader.ReadToEnd()); destinationStream.Write(fileContents, 0, fileContents.Length); } }

//This part of the code is used to write the read content from the server using (var destinationStream = new FileStream(toFilenameToWrite, FileMode.Create)) { long length = response.ContentLength; int bufferSize = 2048; int readCount; byte[] buffer = new byte[2048]; readCount = responseStream.Read(buffer, 0, bufferSize); while (readCount > 0) { destinationStream.Write(buffer, 0, readCount); readCount = responseStream.Read(buffer, 0, bufferSize); } }

Los primeros escriben el contenido en el archivo, pero cuando intento abrir el archivo, dice que está dañado. Pero el último hace el trabajo perfectamente cuando descarga archivos zip. ¿Hay alguna razón específica por la cual el código anterior no funciona para archivos zip ya que funciona perfectamente para archivos de texto?


aquí está mi solución que funcionó para mí

DO#

public IActionResult GetZip([FromBody] List<DocumentAndSourceDto> documents) { List<Document> listOfDocuments = new List<Document>(); foreach (DocumentAndSourceDto doc in documents) listOfDocuments.Add(_documentService.GetDocumentWithServerPath(doc.Id)); using (var ms = new MemoryStream()) { using (var zipArchive = new ZipArchive(ms, ZipArchiveMode.Create, true)) { foreach (var attachment in listOfDocuments) { var entry = zipArchive.CreateEntry(attachment.FileName); using (var fileStream = new FileStream(attachment.FilePath, FileMode.Open)) using (var entryStream = entry.Open()) { fileStream.CopyTo(entryStream); } } } ms.Position = 0; return File(ms.ToArray(), "application/zip"); } throw new ErrorException("Can''t zip files"); }

no te pierdas la ms.Position = 0; aquí


byte[] fileContents = Encoding.UTF8.GetBytes(responseReader.ReadToEnd());

Intenta interpretar un archivo PDF binario como un texto UTF-8. Eso simplemente no puede funcionar.

Para obtener un código correcto, consulte Cargar y descargar un archivo binario al / del servidor FTP en C # /. NET .