IT

blockblob 업로드 및 content type 설정

itgroup 2023. 4. 23. 10:16
반응형

blockblob 업로드 및 content type 설정

사용하고 있다Microsoft.WindowsAzure.Storage.*C#에서 라이브러리.

스토리지로 업로드하는 방법은 다음과 같습니다.

// Store in storage
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("...connection string...");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("pictures");

// Create container if it doesnt exist
container.CreateIfNotExists();

// Make available to everyone
container.SetPermissions(new BlobContainerPermissions
{
    PublicAccess = BlobContainerPublicAccessType.Blob
});

// Save image
CloudBlockBlob blockBlob = container.GetBlockBlobReference("blah.jpg");
blockBlob.UploadFromByteArray(byteArrayThumbnail, 0, byteArrayThumbnail.Length);
blockBlob.Properties.ContentType = "image/jpg";  // *** NOT WORKING ***

스토리지에 업로드한 모든 내용은 "image/jpg" 값을 가진 세터를 사용하더라도 "application/octet-stream" 콘텐츠 유형으로 저장됩니다(코드의 마지막 줄 참조).

질문 1: 왜 콘텐츠가 작동하지 않는가?타이프 세터?

질문 2: Windows Azure 관리 포털을 사용하여 콘텐츠 유형을 수동으로 "image/jpg"로 변경한 후 파일의 절대 URI를 브라우저 주소 필드에 복사하고 Enter 키를 누르면 jpg 파일이 표시되지 않고 다운로드 됩니다.이 마임 타입은 다운로드가 아니라 표시해야 하는 것 아닌가요?이거 어떻게 바꾸죠?

실제로 SetProperties 메서드를 호출할 필요는 없습니다.BLOB 업로드 중에 콘텐츠유형을 설정하려면ContentType업로드 메서드를 호출하기 전에 속성을 선택합니다.따라서 코드는 다음과 같습니다.

// Save image
CloudBlockBlob blockBlob = container.GetBlockBlobReference("blah.jpg");
blockBlob.Properties.ContentType = "image/jpg";
blockBlob.UploadFromByteArray(byteArrayThumbnail, 0, byteArrayThumbnail.Length);

그러면 효과가 있을 거야

을 변경한 후PropertiesCloudBlockBlob에 전화해야 합니다.SetProperties()사용하여 변경 내용을 저장합니다.

LINQ-to-Entities와 비슷하다고 생각하시면 됩니다.로컬 개체를 원하는 대로 변경할 수 있습니다.다만,SaveChanges(), 실제로 저장되는 것은 없습니다.

새 SDK 사용Azure.Storage.Blobs

BlobHttpHeaders blobHttpHeaders = new BlobHttpHeaders();
blobHttpHeaders.ContentType = "image/jpg";
blobClient.SetHttpHeaders(blobHttpHeaders);

유감스럽게도, 현재 최신 SDK(12.x.+)에 대응하고 있는 회답은 없습니다.

최신 SDK를 사용하는 경우 콘텐츠유형은BlobHttpHeaders.

var _blobServiceClient = new BlobServiceClient("YOURCONNECTIONSTRING");

var containerClient = _blobServiceClient.GetBlobContainerClient("YOURCONTAINERNAME");

var blob = containerClient.GetBlobClient("YOURFILE.png");

var blobHttpHeader = new BlobHttpHeaders();

blobHttpHeader.ContentType = "image/png";

var uploadedBlob = await blob.UploadAsync(YOURSTREAM, blobHttpHeader);

Gaurav Mantri의 답변과 같은 작성을 설정하는 것이 가장 좋습니다.이 시점에서 다른 답변을 갱신할 필요가 있는 경우는, 혼란스러울 가능성이 있습니다.

// GET blob
CloudBlobContainer container = blobClient.GetContainerReference(containerName);
CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName); 

// if you don't do this you'll wipe properties you didn't mean to
await blockBlob.FetchAttributesAsync();

// SET
blockBlob.Properties.ContentType = mimetype;

// SAVE
await blockBlob.SetPropertiesAsync();

Azure Blob SDK 의 새로운 버전에서는, 이 기능은 더 이상 동작하지 않습니다.

이건 내게 효과가 있었어:

CloudBlockBlob blockBlob = cloudBlobContainer.GetBlockBlobReference(blobName);
blockBlob.Properties.ContentType = contentType;                            
await blockBlob.SetPropertiesAsync();

언급URL : https://stackoverflow.com/questions/24621664/uploading-blockblob-and-setting-contenttype

반응형