使用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文件 。