【发布时间】:2020-08-17 23:17:26
【问题描述】:
我正在尝试编写一个程序,将 txt 文件从 FTP 站点直接下载到 Azure 文件共享中,而无需先将文件写入磁盘。我的计划是将数据下载到MemoryStream,然后将流上传到云存储。该过程运行,但生成的文件有 0 kb。作为测试,我还尝试将MemoryStream 数据写入本地文件。当我这样做时,生成的文件与原始文件(8 kb)大小相同,但在记事本中打开时没有任何数据可见。有人可以告诉我哪里出错了吗?
FtpWebRequest ftpRequest = (FtpWebRequest)FtpWebRequest.Create("ftp://ftp.domain.com:21/ftp/test/FileName.txt");
ftpRequest.Credentials = new NetworkCredential("userName", "password");
ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
Stream ftpStream = ftpResponse.GetResponseStream();
//Write to a Azure File Share (results in 0 kb file)
using (MemoryStream ms = new MemoryStream())
{
byte[] byteBuffer = new byte[2048];
int bytesRead = ftpStream.Read(byteBuffer, 0, 2048);
while (bytesRead > 0)
{
ms.Write(byteBuffer, 0, bytesRead);
bytesRead = ftpStream.Read(byteBuffer, 0, 2048);
}
CloudStorageAccount storageAccount = new CloudStorageAccount(new StorageCredentials("accountName", "azureKey"), false);
CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
CloudFileShare fileShare = fileClient.GetShareReference(ConfigurationManager.AppSettings.Get("share-name"));
CloudFileDirectory rootDirectory = fileShare.GetRootDirectoryReference();
CloudFileDirectory destDir = rootDirectory.GetDirectoryReference("DestnationDirectory");
var newFile = destDir.GetFileReference("NewDownloadedFile.txt");
newFile.UploadFromStream(ms);
}
ftpStream.Close();
ftpResponse.Close();
【问题讨论】:
标签: c# ftp azure-blob-storage memorystream ftpwebrequest