API C# – обеспечение загрузки файлов из хранилища BLOB-объектов Azure.C#

Место общения программистов C#
Ответить
Anonymous
 API C# – обеспечение загрузки файлов из хранилища BLOB-объектов Azure.

Сообщение Anonymous »

В настоящее время я работаю над проблемой, с которой столкнулся при использовании хранилища BLOB-объектов Azure вместе с C# API. Я также не нашел подходящего решения в вопросах здесь, поскольку большинство из них просто загружают файлы один раз, и все готово.
Чего я хочу достичь, так это иметь API в качестве прокси для обработки загрузки файлов для моих мобильных клиентов. Поэтому мне нужен быстрый ответ/быстрые ответы по первому байту, поскольку у мобильных приложений довольно небольшой таймаут - пять секунд.

Код: Выделить всё

[HttpGet, Route("{id}")]
[Authorize(Policy = xxxxx)]
public async Task Get(Guid tenantId, Guid id)
{
if (tenantId == default)
{
throw new ArgumentException($"Tenant id '{tenantId}' is not valid.");
}

if (id == default)
{
throw new ArgumentException($"Package id '{id}' is not valid.");
}

var assetPackage = await _assetPackageService.ReadPackage(myenum.myvalue, tenantId, id).ConfigureAwait(false);
if (assetPackage == null)
{
return File(new MemoryStream(), "application/octet-stream");
}
return File(assetPackage.FileStream, assetPackage.ContentType);
}

Код: Выделить всё

public async Task ReadPackage(AssetPackageContent packageContent, Guid tenantId, Guid packageId)
{
var blobRepository = await _blobRepositoryFactory.CreateAsync(_settings, tenantId.ToString())
.ConfigureAwait(false);

var blobPath = string.Empty;

//some missing irrelevant code

var blobReference = await blobRepository.ReadBlobReference(blobPath).ConfigureAwait(false);

if (blobReference == null)
{
return null;
}

var stream = new MemoryStream();
await blobReference.DownloadToStreamAsync(stream).ConfigureAwait(false);
stream.Seek(0, SeekOrigin.Begin);
return new AssetPackage(packageContent, stream, blobReference.Properties.ContentType);
}
Я знаю, что MemoryStream ужасен для загрузки и прочего, поскольку он поглощает файлы в память перед передачей их клиенту.
Как бы вы это сделали? заняться этим? Есть ли простое решение, чтобы мой API выступал в качестве прокси-сервера, а не загружал весь файл, а затем позволял клиенту снова загружать его из моего API?

Подробнее здесь: https://stackoverflow.com/questions/696 ... lobstorage
Ответить

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

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

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

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

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