내 Asp.net MVC에서 이미지 파일이 실제 폴더 구조에 보관 될 때 다음 코드를 사용했습니다.
public FileResult DownloadFile(string imageName)
{
string fullPath = this.GetFullPath(imageName);
string contentType = " image/pjpeg";
return new FilePathResult(fullPath, contentType)
{
FileDownloadName = imageName
};
}
그러나 이제 이미지를 Azure Blob으로 이동했으며 여기에서 이미지를 어떻게 다운로드 할 수 있습니까? FilePathResult dint가 작동하기 때문에 다음 코드를 사용해 보았습니다.
public ActionResult DownloadFile(string imgName)
{
string fullPath = imgName;
CloudStorageAccount account = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConString"));
CloudBlobClient client = account.CreateCloudBlobClient();
CloudBlobContainer blobContainer = client.GetContainerReference(ConfigurationManager.AppSettings["BlobReference"]);
CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(imgName);
return Redirect(blockBlob.Uri.AbsoluteUri);
}
그러나 파일이 다운로드되지 않고 대신 새 창에서 열립니다. 새 창에서 열지 않고 파일을 다운로드하도록 안내 해주세요.
따라서이 작업을 수행 할 수있는 두 가지 방법이 있습니다.
1. 항상 파일을 다운로드하기를 원한다고 가정합니다.
파일을 항상 다운로드 Content-Disposition
하려면 blob 의 속성을 attachment; filename=yourdesiredfilename
. 이 경우 blockBlob.Uri.AbsoluteUri
항상 파일을 강제로 다운로드합니다.
2. 때때로 파일을 다운로드하고 브라우저에서 파일을 여는 유연성을 원한다고 가정합니다.
이 경우 Blob에 SAS (공유 액세스 서명)를 만들고 SAS Content-Disposition
의 일부로 헤더를 지정할 수 있습니다. 이를위한 샘플 코드는 다음과 같습니다.
CloudStorageAccount acc = new CloudStorageAccount(new StorageCredentials("<accountname>", "<accountKey>"), true);
var client = acc.CreateCloudBlobClient();
var container = client.GetContainerReference("<containername>");
var blob = container.GetBlockBlobReference("<imagename.png>");
var sasToken = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
{
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(1),
Permissions = SharedAccessBlobPermissions.Read
}, new SharedAccessBlobHeaders()
{
ContentDisposition = "attachment;filename=<imagename.png>",
});
var blobUrl = blob.Uri.AbsoluteUri + sasToken;
Redirect(blobUrl);
내 권장 사항은 더 많은 보안을 제공하기 때문에 # 2를 사용하는 것입니다. 개인 Blob 컨테이너에서도 Blob을 공유 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다