Ich habe zwei Methoden Herunterladen zurück:Archiv oder ein Bild nach dem Hochladen auf FTP beschädigt ist und mit FtpWebRequest
auf den FTP-Server- Uploads Dateien
- Downloads von Dateien von dem Server.
Alles funktioniert perfekt mit Text oder XML-Dateien. Aber wenn ich versuche, ein Archiv oder ein Bild hochzuladen und dann herunterzuladen, bekomme ich den "Windows kann den Ordner nicht öffnen. Die komprimierte ZIP-Datei ist ungültig" Fehler für die Archive und fast das gleiche für die Bilder. Was könnte das Problem sein? Hier
ist die Auflistung meiner Methoden:
Upload:
private string Upload(string Login, string Password, string FilePath, string FileName, string uuid, string FTPDir)
{
string CreateDirectory = CreateFTPDirectory(Login, Password, uuid, FTPDir);
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(@"ftp://" + FTPDir + uuid + "/" + FileName);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.UseBinary = true;
StreamReader sourceStream = new StreamReader(FilePath + FileName);
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;
using (Stream S = request.GetRequestStream())
{
S.Write(fileContents, 0, fileContents.Length);
}
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
response.Close();
return response.StatusDescription;
}
Download:
private string Download(string Login, string Password, string FileName, string uuid, string FTPDir, string Destination)
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + FTPDir + uuid + "/" + FileName);
request.UseBinary = true;
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(Login, Password);
byte[] buffer = new byte[1024];
using (var response = (FtpWebResponse)request.GetResponse())
{
using (var stream = response.GetResponseStream())
{
using (var fs = new FileStream(Destination, FileMode.OpenOrCreate))
{
int readCount = stream.Read(buffer, 0, 1024);
while (readCount > 0)
{
fs.Write(buffer, 0, readCount);
readCount = stream.Read(buffer, 0, 1024);
}
}
return response.StatusDescription;
}
}
}
In Ihrem 'Upload' wird der Dateiinhalt durch' Encoding.UTF8.GetBytes' geändert. Sie sollten die Daten lieber übertragen, ohne sie zu codieren/zu decodieren. –