web-dev-qa-db-ja.com

URLに移動すると、AzureBlobは常にダウンロードされます

このアプリケーションでは、ユーザーにドキュメントをWindows AzureBLOBストレージアカウントにアップロードする機能を提供します。ドキュメントまたは画像をアップロードすると、URL(https://name.blob.core.windows.net/container/file-name.jpg)が割り当てられます。ドキュメントが画像、PDF、またはブラウザでレンダリングできるファイルの場合、ユーザーがファイルをダウンロードしなくても、ブラウザに表示しようとしています。新しいウィンドウまたはタブを開いて、ユーザーをIEのblob uriに誘導すると、画像またはpdfがブラウザーで正しくレンダリングされます。ただし、Chrome、FireFox、またはSafariでURIを指す新しいウィンドウを開こうとすると、ブラウザに表示するのではなく、ファイルをダウンロードするだけです。

後者の3つのブラウザに、ファイルをダウンロードするのではなく、単に表示するように強制する方法はありますか?

27
Nick Olsen

これは、blobの コンテンツタイプ プロパティを設定しなかったためです(デフォルトはapplication/octet-streamで、ほとんどのブラウザーでダウンロードがトリガーされます)。 PDFファイルを正しく表示したい場合は、PDFファイルをアプリケーションに変更する必要があります/ pdf(jpegファイルの場合はimage/jpeg)。

コンテンツタイプは、Azure Storage Explorer、Cloud Storage Studio、CloudBerry、CloudXplorerなどの一般的なツールを使用するか、SDKを使用して変更できます。これらのツールの中には、ファイルをアップロードした後、コンテンツタイプを自動的に正しいものに設定するものがあることに注意してください。

47
   blob.Properties.ContentType = "application/pdf";

//拡張子でファイルのコンテンツタイプを取得します

    public static string GetFileContentType(string FilePath)
    {
        string ContentType = String.Empty;
        string Extension = Path.GetExtension(FilePath).ToLower();

        switch (Extension)
        {
            case ConstantUtility.FILE_EXTENSION_PDF:
                ContentType = "application/pdf";
                break;
            case ConstantUtility.FILE_EXTENSION_TXT:
                ContentType = "text/plain";
                break;
            case ConstantUtility.FILE_EXTENSION_BMP:
                ContentType = "image/bmp";
                break;
            case ConstantUtility.FILE_EXTENSION_GIF:
                ContentType = "image/gif";
                break;
            case ConstantUtility.FILE_EXTENSION_PNG:
                ContentType = "image/png";
                break;
            case ConstantUtility.FILE_EXTENSION_JPG:
                ContentType = "image/jpeg";
                break;
            case ConstantUtility.FILE_EXTENSION_JPEG:
                ContentType = "image/jpeg";
                break;
            case ConstantUtility.FILE_EXTENSION_XLS:
                ContentType = "application/vnd.ms-Excel";
                break;
            case ConstantUtility.FILE_EXTENSION_XLSX:
                ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                break;
            case ConstantUtility.FILE_EXTENSION_CSV:
                ContentType = "text/csv";
                break;
            case ConstantUtility.FILE_EXTENSION_HTML:
                ContentType = "text/html";
                break;
            case ConstantUtility.FILE_EXTENSION_XML:
                ContentType = "text/xml";
                break;
            case ConstantUtility.FILE_EXTENSION_Zip:
                ContentType = "application/Zip";
                break;
            default:
                ContentType = "application/octet-stream";
                break;

        }


        return ContentType;
    }

これを使用して、blobを保存しながらコンテンツタイプを設定します。

Blobに保存されているメディアファイルのコンテンツタイプを設定

24
sudhAnsu63

PowerShellを介してファイルをアップロードする場合は、以下の構文を使用して、アップロード中にコンテンツタイプを設定します。

Set-AzureStorageBlobContent -File <localFilePath> -Container <containerName> -Properties @{"ContentType"="text/plain"} -Context $ctx

上記では、blobコンテンツタイプをtext/plainに設定しました。これは、テンプレートで使用されるJSONファイルとHTMLファイルをアップロードするときに役立ちます。その他のコンテンツタイプのヘッダー値のリスト ここ

2
Sam Murcio

Azure SDK(12.x +)を使用している場合、(blob.Properties.ContentTypeの代わりに)アップロードメソッドに渡すBlobHttpHeadersの使用を必要とする変更があります。

例えば:

    var header = new BlobHttpHeaders();
    header.ContentType = "image/jpeg";

    var response = await blobClient.UploadAsync(stream, header);
0
Steve G