Задать контент-тип медиа-файлов, хранящихся в Blob

У нас есть веб-сайт, размещенный на Azure. Он основан на мультимедиа, и мы используем JWPlayer для воспроизведения мультимедиа с использованием псевдопотоков HTTP. Медиа-файлы хранятся на BLOB-объектах в 3 форматах - mp4, ogg, webm.

Проблема заключается в том, что тип содержимого медиа-файлов установлен как application / octet-stream для всех типов. В связи с этим возникают некоторые проблемы с воспроизведением мультимедиа и индикатором выполнения.

Как я могу установить соответствующий тип содержимого файлов, хранящихся в BLOB-объекте (например, - video / mp4, video / ogg, video / webm)?

Я не хочу делать это вручную для каждого файла, перейдя в интерфейс BLOB-объектов. Должен быть какой-то другой способ сделать это, о котором я не знаю. Возможно, файл конфигурации, файл настроек и т.д. Или, возможно, блок кода для установки типа контента для всех файлов, хранящихся в папке.

Какие-либо предложения? Спасибо

Ответы на вопрос(4)

вот что я делаю

BlobHTTPHeaders h = new BlobHTTPHeaders();
String blobContentType = "image/jpeg";
h.withBlobContentType(blobContentType);
blobURL.upload(Flowable.just(ByteBuffer.wrap(Files.readAllBytes(img.toPath()))), img.length(), h, null, null, null)
.subscribe(resp-> {
  System.out.println("Completed upload request.");
  System.out.println(resp.statusCode());
});
Решение Вопроса

Это должно работать:

var storageAccount = CloudStorageAccount.Parse("YOURCONNECTIONSTRING");
var blobClient = storageAccount.CreateCloudBlobClient();

var blobs = blobClient
    .GetContainerReference("thecontainer")
    .ListBlobs(useFlatBlobListing: true)
    .OfType<CloudBlockBlob>();

foreach (var blob in blobs)
{
    if (Path.GetExtension(blob.Uri.AbsoluteUri) == ".mp4")
    {
        blob.Properties.ContentType = "video/mp4";
    }
    // repeat ad nauseam
    blob.SetProperties();
}

Или настройте словарь, чтобы вам не приходилось писать кучу операторов if.

 03 дек. 2018 г., 22:31
Возможно, стоит упомянуть, что если у вас есть доступ к System.Web и .NET 4.5 или выше, вы можете вызвать MimeMapping.GetMimeMapping (& quot; somefile.mp4 & quot;), чтобы получить тип контента. УвидетьMSDN Больше подробностей.
 01 мая 2017 г., 20:08
Вот сообщение в блоге с полным списком расширений для отображений mimetype.ppolyzos.com/2015/10/27/…
 13 янв. 2017 г., 10:39
вы можете использовать Azure Storage Explorer, чтобы сделать это вручную.
 19 окт. 2016 г., 17:54
Нет ли возможности напрямую настроить это на портале Azure? без кодирования
 19 февр. 2014 г., 11:11
@ Smarx: можно ли сделать то же самое в CDN,stackoverflow.com/questions/21847663/…

Используя php, можно загрузить видео, установив тип контента следующим образом

$blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString);
//upload
$blob_name = "video.mp4";
$content = fopen("video.mp4", "r");

$options = new CreateBlobOptions();
$options->setBlobContentType("video/mp4");
try {
    //Upload blob
    $blobRestProxy->createBlockBlob("containername", $blob_name, $content, $options);
    echo "success";
} catch(ServiceException $e){
    $code = $e->getCode();
    $error_message = $e->getMessage();
    echo $code.": ".$error_message."<br />";
}
 14 дек. 2017 г., 21:44
Это не работает с текущими пакетами на данный момент.

Это рабочий пример для загрузки видео в хранилище BLOB-объектов Azure с правильным типом контента:

public static String uploadFile(
     CloudBlobContainer container,String blobname, String fpath) {

    CloudBlockBlob blob;
    try {
        blob = container.getBlockBlobReference(blobname);
        File source = new File(fpath);

        if (blobname.endsWith(".mp4")) {
            System.out.println("Set content-type: video/mp4");
            blob.getProperties().setContentType("video/mp4");
        }

        blob.upload(new FileInputStream(source), source.length());

        return blob.getUri().toString();
    } catch (URISyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (StorageException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return null;
}

Ваш ответ на вопрос