Я пишу функцию Azure, которая перемещает файлы из AWS S3 в Azure Datalake, загрузка загружена, загрузка загружена, но я пытаюсь собрать их вместе, потому что не хочу сохранять файл впромежуточное приложение, так сказать, поскольку самой функции Azure не нужно хранить ее, просто передайте ее.
Это не так просто объяснить, поэтому, пожалуйста, потерпите немного здесь, пока я пытаюсь объяснить, что я хочуdo.
Когда я загружаю из S3 с использованием этого кода
await client.GetObjectAsync(new GetObjectRequest { BucketName = bucketName, Key = entry.Key });
У меня нет файловой системы для ее хранения, и я не хочу ее хранить, я хочу еекак некий «объект», который я могу передать непосредственно устройству записи озера данных Azure, которое выглядит следующим образом:
adlsFileSystemClient.FileSystem.UploadFile(adlsAccountName, source, destination, 1, false, true);
Код работает нормально, если я загружаю его на свой локальный диск, а затем загружаю его, ноэто не то, что я хочу, так как у функции azure нет памяти. Я хочу передать загруженный объект непосредственно загрузчику, так сказать
Как мне этого добиться?
**** EDIT ****
// Process the response.
foreach (S3Object entry in response.S3Objects)
{
Console.WriteLine("key = {0} size = {1}", entry.Key.Split('/').Last(), entry.Size);
string fileNameOnly = entry.Key.Split('/').Last();
//await client.GetObjectAsync(new GetObjectRequest { BucketName = bucketName, Key = entry.Key });
GetObjectResponse getObjRespone = await client.GetObjectAsync(bucketName, entry.Key);
MemoryStream stream = new MemoryStream();
getObjRespone.ResponseStream.CopyTo(stream);
if (entry.Key.Contains("MerchandiseHierarchy") == true)
{
WriteToAzureDataLake(stream, @"/PIMRAW/MerchandiseHierarchy/" + fileNameOnly);
}
}
и затем я передаю поток памяти методу azure, но мне нужен потоковый загрузчик, и я не могу его найти, следующее жалуется, что не может преобразовать поток в строку
adlsFileSystemClient.FileSystem.UploadFile(adlsAccountName, source, destination, 1, false, true);
* РЕДАКТИРОВАТЬ2 *
Измените метод загрузки следующим образом, и он создаст файл в месте назначения, но с размером 0, поэтому мне интересно, создаю ли я его до загрузки?
static void WriteToAzureDataLake(MemoryStream inputSource, string inputDestination)
{
// 1. Set Synchronization Context
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
// 2. Create credentials to authenticate requests as an Active Directory application
var clientCredential = new ClientCredential(clientId, clientSecret);
var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, clientCredential).Result;
// 2. Initialise Data Lake Store File System Client
adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);
// 3. Upload a file to the Data Lake Store
//var source = @"c:\nwsys\source.txt";
var source = inputSource;
//var destination = "/PIMRAW/MerchandiseHierarchy/destination.txt";
var destination = inputDestination;
//adlsFileSystemClient.FileSystem.UploadFile(adlsAccountName, source, destination, 1, false, true);
adlsFileSystemClient.FileSystem.Create(adlsAccountName, destination, source);
// FINISHED
Console.WriteLine("6. Finished!");
}