Blob에 저장된 미디어 파일의 콘텐츠 유형 설정
Azure에서 호스팅되는 웹 사이트가 있습니다. 미디어 기반이며 HTTP 의사 스트리밍으로 미디어를 재생하기 위해 JWPlayer를 사용하고 있습니다. 미디어 파일은 mp4, ogg, webm의 3 가지 형식으로 blob에 저장됩니다.
문제는 미디어 파일의 콘텐츠 유형이 모든 유형에 대해 application / octet-stream으로 설정되어 있다는 것입니다. 이로 인해 미디어 재생 및 진행률 표시 줄에 몇 가지 문제가 있습니다.
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();
}
또는 사전을 설정하여 if 문을 여러 개 작성할 필요가 없습니다.
다음은 올바른 Content-Type을 사용하여 Azure Blob Storage에 비디오를 업로드하는 작업 예제입니다.
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 />";
}
여기 내가하는 일이야
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를 사용 하면 Node.js 빠른 시작에 설명 된 BlockBlobURL
대로 Blob을 업로드 할 수 있습니다 .
const {
Aborter,
BlockBlobURL,
ContainerURL,
ServiceURL,
SharedKeyCredential,
StorageURL,
uploadFileToBlockBlob
} = require("@azure/storage-blob");
const containerName = "demo";
const blobName = "quickstart.txt";
const content = "hello!";
const credentials = new SharedKeyCredential(
STORAGE_ACCOUNT_NAME,
ACCOUNT_ACCESS_KEY
);
const pipeline = StorageURL.newPipeline(credentials);
const serviceURL = new ServiceURL(
`https://${STORAGE_ACCOUNT_NAME}.blob.core.windows.net`,
pipeline
);
const containerURL = ContainerURL.fromServiceURL(serviceURL, containerName);
const blockBlobURL = BlockBlobURL.fromContainerURL(containerURL, blobName);
const aborter = Aborter.timeout(30 * ONE_MINUTE);
await blockBlobURL.upload(aborter, content, content.length);
그런 다음 업로드 후 다음 방법으로 콘텐츠 유형을 설정할 수 있습니다 setHTTPHeaders
.
// Set content type to text/plain
await blockBlobURL.setHTTPHeaders(aborter, { blobContentType: "text/plain" });
의 uploadFileToBlockBlob
방법으로 파일을 업로드 할 수 있습니다 @azure/storage-blob
.
참고 URL : https://stackoverflow.com/questions/10040403/set-content-type-of-media-files-stored-on-blob
'Program Tip' 카테고리의 다른 글
Python 패키지 내부에서 (정적) 파일을 읽는 방법은 무엇입니까? (0) | 2020.11.17 |
---|---|
변수에서 대소 문자 구분을 무시하는 Windows 배치 명령 (0) | 2020.11.17 |
파일이없는 경우 파일 만들기 (0) | 2020.11.17 |
최적의 scrypt 작업 요소는 무엇입니까? (0) | 2020.11.17 |
stdout을 변수로 캡처하지만 여전히 콘솔에 표시 (0) | 2020.11.17 |