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.

etarvt, auf die Zeile wird der Zeitablauf auftreten, ich vermute auf "Stream ftpStream = reqFTP.GetRequestStream();" ? Danke.

InformationsquelleAutor etarvt | 2010-05-13

Schreibe einen Kommentar