c# - Hochladen von Dateien auf ftp-server
Ich habe ein problem mit dem hochladen der Dateien auf den ftp-server. Ich habe ein paar Tasten. Jede Taste uploads verschiedene Dateien auf dem ftp. Das erste mal, wenn eine Taste geklickt wird, wird die Datei erfolgreich hochgeladen wurde, aber den zweiten, und später versucht, fail. Es gibt mir "Der Vorgang hat das Zeitlimit überschritten". Wenn ich die Website schließen und öffnen Sie es dann erneut hochladen ich kann wieder nur eine Datei. Ich bin sicher, dass ich außer Kraft setzen können, Dateien auf dem ftp. Hier ist der code:
protected void btn_export_OnClick(object sender, EventArgs e)
{
Stream stream = new MemoryStream();
stream.Position = 0;
//fill the stream
bool res = this.UploadFile(stream, "test.csv", "dir");
stream.Close();
}
private bool UploadFile(Stream stream, string filename, string ftp_dir)
{
stream.Seek(0, SeekOrigin.Begin);
string uri = String.Format("ftp://{0}/{1}/{2}", "host", ftp_dir, filename);
try
{
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
reqFTP.Credentials = new NetworkCredential("user", "pass");
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.KeepAlive = false;
reqFTP.UseBinary = true;
reqFTP.UsePassive = true;
reqFTP.ContentLength = stream.Length;
reqFTP.EnableSsl = true; //it's FTPES type of ftp
int buffLen = 2048;
byte[] buff = new byte[buffLen];
int contentLen;
try
{
Stream ftpStream = reqFTP.GetRequestStream();
contentLen = stream.Read(buff, 0, buffLen);
while (contentLen != 0)
{
ftpStream.Write(buff, 0, contentLen);
contentLen = stream.Read(buff, 0, buffLen);
}
ftpStream.Flush();
ftpStream.Close();
}
catch (Exception exc)
{
this.lbl_error.Text = "Error:<br />" + exc.Message;
this.lbl_error.Visible = true;
return false;
}
}
catch (Exception exc)
{
this.lbl_error.Text = "Error:<br />" + exc.Message;
this.lbl_error.Visible = true;
return false;
}
return true;
}
Hat jemand Idee was kann die Ursache dieses seltsamen Verhaltens? Ich denke, ich schließe alle streams genau. Könnte dies im Zusammenhang mit dem ftp-server-Einstellungen? Der admin sagte, dass der ftp-handshake nie passiert zum zweiten mal.
InformationsquelleAutor etarvt | 2010-05-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
beginnen Sie mit der Verpackung Ihrer Stream-Erstellung in einer using-Klausel.
Dadurch wird sichergestellt, dass der stream geschlossen und alle nicht verwalteten Ressourcen entsorgt werden, ob ein Fehler Auftritt oder nicht
Es ist vielleicht nicht die Quelle der Fehler, aber es ist gute Praxis
Ich probierte es aus. Aber das problem besteht immer noch, wirklich, vielleicht ist es nicht die Quelle. Ich habe versucht, mit KeepAlive = true, aber es ändert sich nichts zu.
InformationsquelleAutor Daniel Dyson
Ich Ihren code benutzt, das gleiche problem hatte und es behoben.
Nachdem Sie den stream schließen, müssen Sie Lesen
reqFTP response
durch den AufrufGetResponse()
schließen Sie dann die Antwort. Hier ist der code, der das problem behebt:Sie nicht haben, um anzeigen, die Antwort, können Sie nur erhalten Sie es und schließen Sie es, ich bin eine Anzeige nur für Referenz.
InformationsquelleAutor Haider Abbas