0

我正在尝试将 .docx 文件上传MemoryStream到 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();
}
4

1 回答 1

0

将文档直接写入请求流。使用中间 没有意义MemoryStream。和StreamReader/StreamWriter用于处理文本文件,而 a.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);
}

或使用WebClient.OpenWrite

using (var webClient = new WebClient())
{
    const string url = "ftp://ftp.example.com/remote/path/document.docx";
    using (Stream uploadStream = client.OpenWrite(url))
    {
        document2.SaveToStream(uploadStream, Spire.Doc.FileFormat.Docx);
    }
}

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

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

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);
}

或者,您可以WebClient.OpenWrite像前面的示例一样使用。

另请参阅类似的问题Zip a directory and upload to FTP server without save the .zip file local in C#

于 2017-11-26T20:50:11.900 回答