我有PGP文件,我已经验证它是有效的,但在FTP上传的某些时候,它们会损坏。检索时,我收到一条错误消息,指出“在这些文件中找不到PGP信息。”
对于它的价值,PGP是版本6.5.8,但我认为这并不重要,因为文件在上传之前似乎没问题。
我的代码如下文件传输,是否有我错过的设置或字段?
static void FTPUpload(string file)
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.itginc.com" + "/" + Path.GetFileName(file));
request.UseBinary = true;
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(ApplicationSettings["Username"], ApplicationSettings["Password"]);
StreamReader sr = new StreamReader(file);
byte[] fileContents = Encoding.UTF8.GetBytes(sr.ReadToEnd());
sr.Close();
request.ContentLength = fileContents.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
FtpWebResponse resp = (FtpWebResponse)request.GetResponse();
Console.WriteLine("Upload file complete, status {0}", resp.StatusDescription);
resp.Close();
string[] filePaths= Directory.GetFiles(tempPath);
foreach (string filePath in filePaths)
File.Delete(filePath);
}
感谢任何帮助
答案 0 :(得分:3)
嗯,不要把它读成字节数组,而是做这样的事情
using (var reader = File.Open(source, FileMode.Open))
{
var ftpStream = request.GetRequestStream();
reader.CopyTo(ftpStream);
ftpStream.Close();
}
答案 1 :(得分:2)
PGP将数据编码为二进制流,因此您通过StreamReader和UTF8读取数据可能会破坏数据。 FTP不太可能在显式二进制模式下改变数据(尽管默认情况下UseBinary为true,因此您的设置根本不应该执行任何操作)。