簡體   English   中英

使用WebRequest上傳到FTP服務器后文件損壞

[英]File corrupted after upload to FTP server with WebRequest

這是將.csv文件傳輸到FTP服務器的一些問題。 傳輸之前是可以的,但是當我在FTP上檢查它時,它看起來好像壞了或有些東西:

"ЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ  T8пїЅпїЅпїЅпїЅпїЅпїЅ\p3>@L @E8?5=:>                                                                               BпїЅaпїЅ="

編碼有問題嗎? 我正在使用這種下載方法:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://xxxxxxxx.xx/" + name);
        request.Method = WebRequestMethods.Ftp.UploadFile;
        request.KeepAlive = true;
        request.UseBinary = true;
        request.Credentials = new NetworkCredential("xxxx", "qweqwe123");
        StreamReader sourceStream = new StreamReader("F:\\" + xxxx);

        byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
        sourceStream.Close();
        request.ContentLength = fileContents.Length;

        Stream requestStream = request.GetRequestStream();
        requestStream.Write(fileContents, 0, fileContents.Length);
        requestStream.Close();
        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        response.Close();

我不願意回答我的問題,但是評論太久了:解決了,也許有人遇到了這個問題。 嘗試使用此上傳方法:

FileInfo toUpload = new FileInfo("log.txt");
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://csharpcoderr.com/public_html/" + toUpload.Name);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential("name", "pass");
Stream ftpStream = request.GetRequestStream();
FileStream fileStream = File.OpenRead("log.txt");
byte[] buffer = new byte[1024];
int bytesRead = 0;
do
{
   bytesRead = fileStream.Read(buffer, 0, 1024);
   ftpStream.Write(buffer, 0, bytesRead);
}
while (bytesRead != 0);
fileStream.Close();
ftpStream.Close();

我可以通過相同的問題來解決這個問題。 擴展Brawl_Ups解決方案...似乎最好對二進制文件使用BinaryReader。 這是我最終想出的摘要...這是一項正在進行的工作,歡迎您進行任何編輯。

public string UploadFile()
{
    string sRetVal = string.Empty;
    string sFullDestination = this.DestinatinFullIDPath + this.UpLoadFileName;
    try
    {
        if ((this.CreateDestinationDir(this.DestinatinFullModulePath) == true) &
            (this.CreateDestinationDir(this.DestinatinFullIDPath) == true))
        {

            FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(sFullDestination);
            ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
            ftpRequest.Credentials = new NetworkCredential(this.UserName, this.Password);
            ftpRequest.UsePassive = true;
            ftpRequest.UseBinary = true;
            ftpRequest.EnableSsl = false;

            byte[] fileContents;
            using (BinaryReader binReader = new BinaryReader(File.OpenRead(this.UpLoadFullName)))
            {
                FileInfo fi = new FileInfo(this.UpLoadFullName);
                binReader.BaseStream.Position = 0;
                fileContents = binReader.ReadBytes((int)fi.Length);
            }

            ftpRequest.ContentLength = fileContents.Length;
            using (Stream requestStream = ftpRequest.GetRequestStream())
            {
                requestStream.Write(fileContents, 0, fileContents.Length);
            }

            using (FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse())
            {
                sRetVal = string.Format("Upload File Complete, status {0}", response.StatusDescription);
            }
        }
    }
    catch (WebException ex)
    {
        throw new Exception((ex.Response as FtpWebResponse).StatusDescription);
    }
    return sRetVal;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM