Данные повреждаются при загрузке в Azure BlobC#

Место общения программистов C#
Ответить
Anonymous
 Данные повреждаются при загрузке в Azure Blob

Сообщение Anonymous »

У меня есть несколько файлов в Azure Blob, и после обработки больших двоичных объектов я перемещаю их в другой контейнер.
Файл, который я получаю в папке назначения, является ненужным. Что я делаю не так?
Исходный файл имеет расширение «.log.gz».
[Function("Function1")]
public async Task Run([TimerTrigger("0 */5 * * * *", RunOnStartup = true)] TimerInfo myTimer)
{
//Reading the config file. For local it is local.settings.json
var config = new ConfigurationBuilder()
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();

string blbobConnectionString = config["AzureWebJobsStorage"];
BlobContainerClient blobContainerClient = new BlobContainerClient(blbobConnectionString, "abc");
BlobContainerClient destinationBlobContainerClient = new BlobContainerClient(blbobConnectionString, "xyz");

var blobs = blobContainerClient.GetBlobsAsync();
await foreach (var blob in blobs)
{
_logger.LogInformation($"Blob Name: {blob.Name}");
BlobClient blobClient = blobContainerClient.GetBlobClient(blob.Name);

using (Stream blobStream = await blobClient.OpenReadAsync())
using (GZipStream decompressionStream = new GZipStream(blobStream, CompressionMode.Decompress))
using (StreamReader reader = new StreamReader(decompressionStream, Encoding.Default))
{
string line;
while ((line = await reader.ReadLineAsync()) != null)
{
// Process the line here
Console.WriteLine(line);
}

BlobClient destinationBlobClient = destinationBlobContainerClient.GetBlobClient(blob.Name);
blobStream.Position = 0;
await destinationBlobClient.UploadAsync(blobStream);
}
blobClient.DeleteAsync(DeleteSnapshotsOption.None);
}
}

Изменить 1:
Я перечитал большой двоичный объект для загрузки, но все равно получаю ту же ошибку. Ниже приведен обновленный код.
[Function("Function1")]
public async Task Run([TimerTrigger("0 */5 * * * *", RunOnStartup = true)] TimerInfo myTimer)
{
_logger.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");

if (myTimer.ScheduleStatus is not null)
{
_logger.LogInformation($"Next timer schedule at: {myTimer.ScheduleStatus.Next}");
}

//Reading the config file. For local it is local.settings.json
var config = new ConfigurationBuilder()
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();

string blbobConnectionString = config["AzureWebJobsStorage"];

BlobContainerClient blobContainerClient = new BlobContainerClient(blbobConnectionString, "abc");

BlobContainerClient destinationBlobContainerClient = new BlobContainerClient(blbobConnectionString, "xyz");

var blobs = blobContainerClient.GetBlobsAsync();
await foreach (var blob in blobs)
{
_logger.LogInformation($"Blob Name: {blob.Name}");
BlobClient blobClient = blobContainerClient.GetBlobClient(blob.Name);

using (Stream blobStream = await blobClient.OpenReadAsync())
using (GZipStream decompressionStream = new GZipStream(blobStream, CompressionMode.Decompress))
using (StreamReader reader = new StreamReader(decompressionStream, Encoding.Default))
{
string line;
while ((line = await reader.ReadLineAsync()) != null)
{
// Process the line here
Console.WriteLine(line);
JObject json = JObject.Parse(line);
string dateOfEvent = System.Convert.ToString( json["Datetime"]);
string datePattern = "M/d/yyyy h:m:s tt";
DateTime parsedDate;

if (DateTime.TryParseExact(dateOfEvent, datePattern, null, DateTimeStyles.None, out parsedDate))
Console.WriteLine("Parsed date: "+ parsedDate);

json["Datetime"] = parsedDate;

line = json.ToString();

Console.WriteLine(System.DateTime.UtcNow.ToString("YYYY-MM-DDThh:mm:ssZ"));
dateOfEvent = parsedDate.ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture);

var datestring = DateTime.UtcNow.ToString("r");
var jsonBytes = Encoding.UTF8.GetBytes(line);
string stringToHash = "POST\n" + jsonBytes.Length + "\napplication/json\n" + "x-ms-date:" + datestring + "\n/api/logs";
string hashedString = BuildSignature(stringToHash, sharedKey);
string signature = "SharedKey " + customerId + ":" + hashedString;

PostData(signature, datestring, line);
}
}

BlobClient destinationBlobClient = destinationBlobContainerClient.GetBlobClient(blob.Name);
//blobStream.Position = 0;
await destinationBlobClient.UploadAsync(await blobClient.OpenReadAsync());

blobClient.DeleteAsync(DeleteSnapshotsOption.None);
}
}


Подробнее здесь: https://stackoverflow.com/questions/789 ... azure-blob
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»