使用C#将可流式内存文档(.docx)上传到FTP?

我正在尝试将MemoryStream的.docx文件上传到FTP

但是上传完成后,文件为空。

 MemoryStream mms = new MemoryStream(); document2.SaveToStream(mms, Spire.Doc.FileFormat.Docx); string ftpAddress = "example"; string username = "example"; string password = "example"; using (StreamReader stream = new StreamReader(mms)) { // adnu is a random file name. WebRequest request = WebRequest.Create("ftp://" + ftpAddress + "/public_html/b/" + adnu + ".docx"); request.Method = WebRequestMethods.Ftp.UploadFile; request.Credentials = new NetworkCredential(username, password); Stream reqStream = request.GetRequestStream(); reqStream.Close(); } 

将文档直接写入请求流。 使用中间MemoryStream毫无意义。 StreamReader / StreamWriter用于处理文本文件,而.docx是二进制文件格式,因此不要使用它们。

 WebRequest request = WebRequest.Create("ftp://ftp.example.com/remote/path/document.docx"); request.Method = WebRequestMethods.Ftp.UploadFile; request.Credentials = new NetworkCredential(username, password); using (Stream ftpStream = request.GetRequestStream()) { document2.SaveToStream(ftpStream, Spire.Doc.FileFormat.Docx); } 

您只需要一个中间MemoryStream ,如果Spire库需要可搜索流,则FtpWebRequest.GetRequestStream返回的Stream不是。 我无法测试。

如果是这种情况,请使用:

 MemoryStream memoryStream = new MemoryStream(); document2.SaveToStream(memoryStream, Spire.Doc.FileFormat.Docx); memoryStream.Seek(0, SeekOrigin.Begin); WebRequest request = WebRequest.Create("ftp://ftp.example.com/remote/path/document.docx"); request.Method = WebRequestMethods.Ftp.UploadFile; request.Credentials = new NetworkCredential(username, password); using (Stream ftpStream = request.GetRequestStream()) { memoryStream.CopyTo(ftpStream); } 

查看类似问题压缩目录并上传到FTP服务器,而不在C#中本地保存.zip文件 。