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);
그러면 효과가 있을 거야
을 변경한 후Properties
CloudBlockBlob에 전화해야 합니다.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
'IT' 카테고리의 다른 글
Git에서 파일을 분리하는 방법은 왜 두 가지입니까? (0) | 2023.04.23 |
---|---|
Git: 분기를 체크아웃할 수 없음 - 오류: pathspec '...'이(가) git에 알려진 파일과 일치하지 않습니다. (0) | 2023.04.23 |
EPplus를 사용하여 Excel로 DataTable 내보내기 (0) | 2023.04.23 |
웨서버 구성 설정을 사용하여 IIS 7에서 개별 파일의 캐시를 비활성화하려면 어떻게 해야 합니까? (0) | 2023.04.23 |
python으로 목록을 채우는 내장 기능 (0) | 2023.04.23 |