ich lade über die FTP Verbindung Dateien auf den FTP Server. Da ich mehrere Dateien nacheinander hochladen möchte, würde ich das FTP-Requestobject gerne weiterverwenden und nicht immer wieder die FTP Verbindung schließen und neu öffnen.
Nur wie weise ich dem FTPRequestobject die neue Uploadurl zu ohne die Verbindung neu zu starten?
Bis jetzt kam immer: "Fehler 503 - falsche Befehlsreihenfolge -> Sie sind schon eingeloggt"
Mein bisheriger Code:
class { ...
String ftpServerIP;
String ftpUserID;
String ftpPassword;
String uri = "";
ThreadSafe _thSet;
ResourceManager rm;
FtpWebRequest reqFTP;
//Konstruktor
public FTP(String server, string user, string pw, String dicPictures, ResourceManager rm) {
Debug.WriteLine("***** [FTP] *****");
ftpServerIP = server;
ftpUserID = user;
ftpPassword = pw;
uri = "ftp://" + ftpServerIP + "/" + dicPictures + "/";
this.rm = rm;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
// Provide the WebPermission Credintials
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
reqFTP.KeepAlive = true;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.Timeout = System.Threading.Timeout.Infinite;
reqFTP.Proxy = null;
// Specify the data transfer type.
reqFTP.UseBinary = true;
reqFTP.UsePassive = true;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
}
// Uploadmethode
public bool Upload(string filename, String folderName, ProgressBar prgBar, Label lblStat) {
FileInfo fileInf = new FileInfo(filename);
Stream requStream = null;
FtpWebResponse resp = null;
// Create FtpWebRequest object from the Uri provided
try {
requStream = reqFTP.GetRequestStream();
}
catch (Exception ex) {
Debug.WriteLine("[ERROR] Fehler beim Empfangen des RequestStreams \n" + ex.Message + "\n" + ex.StackTrace);
return false;
throw;
}
FileStream fs = null;
try {
byte[] buff = new byte[2048];
int bytesRead = 0;
int actSize = 0;
long fileSize = fileInf.Length;
fs = File.OpenRead(filename);
while (true) {
bytesRead = fs.Read(buff, 0, buff.Length);
if (bytesRead == 0) {
break;
}
requStream.Write(buff, 0, bytesRead);
}
requStream.Close();
resp = (FtpWebResponse)reqFTP.GetResponse();
Debug.WriteLine("[INFO] FTP Upload erfolgreich");
return true;
}
catch (Exception ex) {
MessageBox.Show(rm.GetString("FTPErrorUpload") + ex.Message);
Debug.WriteLine("[ERROR] FTP Upload fehlgeschlagen\n" + ex.Message + "\n" + ex.StackTrace);
return false;
}
finally {
Debug.WriteLine("[INFO] Beenden resp; requStream, fs");
if (resp != null) resp.Close();
if (requStream != null) requStream.Close();
if (fs != null) fs.Close();
}
}
Aufruf im Programm:
FTP ftp = new FTP(userConfig.urlFTPServer, userConfig.usernameFTP, userConfig.passwordFTP, userConfig.dicPictures, rm);
foreach (string uploadImg in FileNames) {
ftp.Upload(uploadImg, tbxNameAlbum.Text, prgUploadFile, lblTextStatFile);
}
Leider verursacht dieser Code folgenden Fehler:
Eine Ausnahme (erste Chance) des Typs "System.Net.ProtocolViolationException" ist in System.dll aufgetreten.
Fehler |
Fehler beim Empfangen des RequestStreams Inhaltsteil mit diesem Verbtyp kann nicht gesendet werden. Viele Grüße und Danke nwb86 |