【发布时间】:2021-08-09 16:49:58
【问题描述】:
各位程序员大家好! 我在通过 FTP 发送 PDF 时遇到问题。我想将正确创建的 PDF 复制到 FTP 目录,不幸的是我发送的文件大小合适,但我无法使用任何 PDF 编辑器打开它。我试过搜索解决方案,但我的转换和编码似乎不起作用。这是我的代码:
public string SendPDF(string FileNamePath, string ShortFileName)
{
string Response = string.Empty;
//FullPath is generated in class constructor
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(FullPath+@"\"+ShortFileName+".pdf");
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(User, Password);
//FileNamePath is directory of source file
byte[] fileContents= File.ReadAllBytes(@FileNamePath + ".pdf");
string pdfBase64 = Convert.ToBase64String(fileContents);
using(var stream = GenerateStreamFromString(pdfBase64))
{
request.ContentLength = stream.Length;
using (Stream requestStream = request.GetRequestStream())
{
stream.CopyTo(requestStream);
requestStream.Close();
}
}
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
Response = "Upload File PDF Complete, status" + Convert.ToString(response.StatusDescription);
}
return Response;
}
public static Stream GenerateStreamFromString(string s)
{
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
另外,我试过下面的代码,但它有同样的问题:
byte[] fileContents ;
using (StreamReader sourceStream = new StreamReader(FileNamePath + ".pdf"))
{
fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
}
request.ContentLength = fileContents.Length;
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(fileContents, 0, fileContents.Length);
}
通过 XML 文件发送完全正常。提前谢谢你,请不要苛刻这是我在这里的第一个问题:3
【问题讨论】:
-
为什么要发送 Base64 字节字符串?您应该直接将 PDF 文件的原始字节发送到服务器端。
-
确实,您的代码都不能安全地上传二进制文件。更不用说第一个代码很糟糕。如需正确代码,请参阅Upload and download a file to/from FTP server in C#/.NET。
-
不幸的是,那里发布的所有解决方案都不能解决我的问题:(。
-
@LexLi 我认为更改 pdf 文件的编码可能会有所帮助。当我像第二个代码一样发送原始字节时,它仍然不起作用。
标签: c# ftp .net-standard system.net