这里有将.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();
答案 0 :(得分:1)
不喜欢根据我的问题回答,但评论太长了: 解决了,也许有人有这个问题。尝试使用此上传方法:
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();
答案 1 :(得分:0)
我可以通过同样的问题来解决这个问题。 正在扩展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;
}