Azure 设置存储在Blob上的媒体文件的内容类型

Azure 设置存储在Blob上的媒体文件的内容类型,azure,content-type,jwplayer,Azure,Content Type,Jwplayer,我们有一个网站托管在Azure上。它是基于媒体的,我们使用JWPlayer通过HTTP伪流播放媒体。媒体文件以3种格式存储在blob上-mp4、ogg、webm 问题是,对于所有类型,媒体文件的内容类型都设置为应用程序/八位字节流。因此,媒体播放和进度条中存在一些问题 如何设置blob上存储的文件的适当内容类型(如-video/mp4、video/ogg、video/webm) 我不想通过进入blob接口为每个文件手动执行此操作。一定还有别的办法,我不知道。可能是配置文件、设置文件等。或者是一个

我们有一个网站托管在Azure上。它是基于媒体的,我们使用JWPlayer通过HTTP伪流播放媒体。媒体文件以3种格式存储在blob上-mp4、ogg、webm

问题是,对于所有类型,媒体文件的内容类型都设置为应用程序/八位字节流。因此,媒体播放和进度条中存在一些问题

如何设置blob上存储的文件的适当内容类型(如-video/mp4、video/ogg、video/webm)

我不想通过进入blob接口为每个文件手动执行此操作。一定还有别的办法,我不知道。可能是配置文件、设置文件等。或者是一个代码块,用于为存储在文件夹中的所有文件设置内容类型

有什么建议吗? 谢谢

这应该可以:

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();
}
var-storageAccount=CloudStorageAccount.Parse(“YOURCONNECTIONSTRING”);
var blobClient=storageAccount.CreateCloudBlobClient();
var blobs=blobClient
.GetContainerReference(“容器”)
.ListBlobs(useFlatBlobListing:true)
.of type();
foreach(blob中的var blob)
{
if(Path.GetExtension(blob.Uri.AbsoluteUri)=“.mp4”)
{
blob.Properties.ContentType=“视频/mp4”;
}
//重复,令人作呕
SetProperties();
}

或者设置一个字典,这样您就不必编写一堆if语句。

这是使用正确的内容类型将视频上载到Azure Blob存储的工作示例:

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;
}

使用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 />";
}
$blobRestProxy=ServicesBuilder::getInstance()->createBlobService($connectionString);
//上传
$blob_name=“video.mp4”;
$content=fopen(“video.mp4”、“r”);
$options=新建CreateBlobOptions();
$options->setBlobContentType(“视频/mp4”);
试一试{
//上传blob
$blobRestProxy->createBlockBlob(“containername”、$blob_name、$content、$options);
呼应“成功”;
}捕获(ServiceException$e){
$code=$e->getCode();
$error_message=$e->getMessage();
echo$code.“:”$error_message.“
”; }
以下是我的工作

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());
});

使用Azure Storage v10 SDK,可以使用
BlockBlobURL
上传blob,如下所示:

const{
流产者,
BlockBlobURL,
ContainerURL,
ServiceURL,
SharedKeyCredential,
StorageURL,
上传文件到BlockBlob
}=需要(“@azure/storage blob”);
const containerName=“演示”;
const blobName=“quickstart.txt”;
const content=“你好!”;
const credentials=新的SharedKeyCredential(
存储\帐户\名称,
帐户\访问\密钥
);
const pipeline=StorageURL.newPipeline(凭证);
const serviceURL=新serviceURL(
`https://${STORAGE\u ACCOUNT\u NAME}.blob.core.windows.net`,
管道
);
const containerURL=containerURL.fromServiceURL(serviceURL,containerName);
const blockBlobURL=blockBlobURL.fromContainerURL(containerURL,blobName);
常量中止=中止超时(30*1分钟);
等待blockBlobURL.upload(中止、内容、内容、长度);
上传后,可以使用
setHTTPHeaders
方法设置内容类型:

//将内容类型设置为text/plain
wait blockBlobURL.setHTTPHeaders(中止程序,{blobContentType:“text/plain”});

可以使用
@azure/storage blob
中的
uploadFileToBlockBlob
方法上载文件。不幸的是,此处接受的答案目前不适用于最新的SDK(12.x.+)

对于最新的SDK,应该通过BlobHttpHeader设置内容类型

var blobServiceClient=newblobserviceclient(“YOURCONNECTIONSTRING”);
var containerClient=blobServiceClient.GetBlobContainerClient(“YOURCONTAINERNAME”);
var blob=containerClient.GetBlobClient(“YOURFILE.jpg”);
var blobHttpHeader=新的BlobHttpHeaders();
blobHttpHeader.ContentType=“image/png”;
var uploadedBlob=await blob.UploadAsync(YOURSTREAM,blobHttpHeader);

@smarx:是否也可以在CDN中执行相同的操作,是否有可能直接在Azure Portal上设置此功能?没有Codinger,这里有一篇博文,其中列出了对mimetype映射的全面扩展。值得一提的是,如果您可以访问System.Web和.NET 4.5或更高版本,则可以调用MimeMapping.GetMimeMapping(“somefile.mp4”)来获取内容类型。有关更多详细信息,请参阅。到目前为止,这不适用于当前包。它工作正常。在我看来,目前这个答案应该被标记为接受。