Я написал функцию, которая перемещает файлы с FTP-сервера в хранилище BLOB-объектов Azure.Я хочу передать поток с FTP на blob, чтобы я мог загрузить файлы.Я запускаю цикл while для каждого файла и пытаюсь переместить файл в хранилище BLOB-объектов, используя UploadFromStreamAsync()
.Но когда я пришел на этот вызов, мой потоковый объект удаляется из-за того, какой файл передается в блоб, но без какого-либо содержимого.Я не хочу распоряжаться своим объектом потока, пока все файлы не будут переданы.Может кто-нибудь сказать мне, что не так происходит?
public static async Task FTP_TO_BLOB_TRANSFER()
{
string ftpPath = ConfigurationSettings.AppSettings.Get("ftpPath");
string ftpUserName = ConfigurationSettings.AppSettings.Get("ftpUserName");
string ftpPassword = ConfigurationSettings.AppSettings.Get("ftpPassword");
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpPath);
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential(ftpUserName, ftpPassword);
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
string connectionString = ConfigurationSettings.AppSettings.Get("connectionString");
string folderName = "Inbox/";
string file = reader.ReadLine();
while (!string.IsNullOrEmpty(file))
{
string fileName = Path.GetFileNameWithoutExtension(file);
string guid = Guid.NewGuid().ToString();
string extension = Path.GetExtension(file);
try
{
Stream fileForBlobStorage = reader.BaseStream;
if (CloudStorageAccount.TryParse(connectionString, out storageAccount))
{
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("falcon");
BlobContainerPermissions permissions = new BlobContainerPermissions
{
PublicAccess = BlobContainerPublicAccessType.Blob
};
await cloudBlobContainer.SetPermissionsAsync(permissions);
CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(folderName + fileName + "-" + '[' + guid + ']' + guid + extension.ToString());
await cloudBlockBlob.UploadFromStreamAsync((Stream )fileForBlobStorage);
}
else
{
Console.WriteLine("Connection string not defined.");
}
}
catch (Exception e)
{
string message = e.Message;
Console.WriteLine(message);
}
file = reader.ReadLine();
}
}