Feedback

C# - FTP File Upload (mit Buffer)

Veröffentlicht von am 11.06.2008
(3 Bewertungen)
Ein Snippet für den File-Upload findet sich bereits unter http://dotnet-snippets.de/dns/c-datei-auf-einen-ftp-uploaden-SID494.aspx

Mich stört daran, dass dazu die ganze Datei auf einmal in den Buffer geladen wird. Erstens braucht das vielleicht für eine Video-Datei viel zu viel Speicher, zweitens kann man überhaupt keinen Fortschritt anzeigen
GFU-Schulungen  [Anzeige]

Visual Studio Team Foundation Server 2017/2015 (TFS) für Administratoren - Kompakt

Nach dieser Schulung beherrschen Sie die Grundlagen des TFS. Sie erledigen administrative Aufgaben schnell und sicher.

VB.NET Komplett

Sie stehen vo der Aufgabe, individuelle Anwendungen für Windows zu schreiben. Hier ist VB.NET die optimale Sprache. Sie erlernt sich recht leicht und passt sich komplett in die .NET Umgebung von Microsoft ein. Nach der Schulung entwickeln Sie anwenderfreundliche Programme in VB.NET . Mit den objektorientierten Modellen in VB.NET erzeugen Sie außerdem wiederverwendbare Komponenten.

//Verwenden kann man den Buffer so

            FtpWebRequest req = (FtpWebRequest)WebRequest.Create("ftp://ftp.someserver.de/httpdocs/somefile.xml");
            req.Credentials = new NetworkCredential("XXX", "XXX");
            FtpHelper.UploadFile(req, tempPath, -1);

//Der Helper...

 class FtpHelper
        {
            const Int32 defaultBufferSize = 1024;//1KB

            public static void UploadFile(FtpWebRequest req, string localFilePath, Int32 bufferSize)
            {              
                if (bufferSize < 1) bufferSize = defaultBufferSize;

                FileStream tempStream = new FileStream(localFilePath, FileMode.Open);                
                byte[] buffer = new byte[bufferSize];
                Int64 noOfBuffers = tempStream.Length / Convert.ToInt64(bufferSize);//rundet automatisch ab
                Int32 lastBufferSize = Convert.ToInt32(tempStream.Length - noOfBuffers * bufferSize);

                req.Method = WebRequestMethods.Ftp.UploadFile;
                Stream ftpStream = req.GetRequestStream();

                //Buffer die komplett ausgelesen werden
                for (int i = 0; i < noOfBuffers; i++)
                {
                    tempStream.Read(buffer, 0, buffer.Length);
                    ftpStream.Write(buffer, 0, buffer.Length);
                }

                if (lastBufferSize > 0)
                {
                    //letzter Buffer der nur zum Teil ausgelesen wird
                    tempStream.Read(buffer, 0, lastBufferSize);
                    ftpStream.Write(buffer, 0, lastBufferSize);
                }

                ftpStream.Close();
                tempStream.Close();
            }
        }
Abgelegt unter FTP, Upload, Buffer.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!