Сохранить в Azure Хранение работает для изображений, но не для PDF - PullRequest
0 голосов
/ 06 августа 2020

Я видел здесь несколько похожих вопросов, поскольку последние 2 часа я провел в поисковой системе, и все их принятые ответы кажутся одинаковыми - что в опубликованном коде отсутствует строка contenttype = "application/pdf".

Но, как вы можете видеть, у меня есть эта строка (была программно закодирована, теперь жестко закодирована, чтобы убедиться), но проблема все еще есть.

Проблема в том, что я могу загружать файлы jpg и png в Azure хранилище, и он отлично работает. Однако файлы pdf загружаются без ошибок, но когда я нажимаю на них в Azure Storage Explorer (включая нажатие кнопки «Загрузить»), открывается новая вкладка, но она пуста.

Может ли кто-нибудь увидеть, что я делаете что-то неправильно?

Заранее спасибо.

       public async Task<string> BlobStorageUploadFromFile(string filename)
    {
        string storageConnection = "[Connection String is Here]";
        CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(storageConnection);

        //Create a blob client
        CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();

        //Create a container 
        CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("attachments");

        //Create Adhoc security policy - (Create permissions with 1hr expiry)
        SharedAccessBlobPolicy adHocPolicy = new SharedAccessBlobPolicy()
        {
            SharedAccessExpiryTime = DateTime.UtcNow.AddHours(1),
            Permissions = SharedAccessBlobPermissions.Create
        };

        // Generate the shared access signature for the container, setting the constraints directly on the signature.
        string sasContainerToken = cloudBlobContainer.GetSharedAccessSignature(adHocPolicy, null);

        //Fetch the container again using the containerURI with the secure token on the end
        CloudBlobContainer cloudBlobContainer2 = new CloudBlobContainer(new Uri(cloudBlobContainer.Uri + sasContainerToken));

        //Get Blob reference
        CloudBlockBlob cloudBlockBlob = cloudBlobContainer2.GetBlockBlobReference(filename);
        cloudBlockBlob.Properties.ContentType = "application/pdf"; // GetMimeTypeFromURL(filename);

        using var fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
        using var sr = new StreamReader(fs, Encoding.UTF8);

        //Upload to Azure
        await cloudBlockBlob.UploadFromStreamAsync(sr.BaseStream);

        //This returns the URI but cannot open if PDF
        return cloudBlockBlob.Uri.ToString();

    }

не удается открыть PDF-файлы 1

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Решено ... с помощью типичного "решения Microsoft" ...

Даже если изображение в вопросе было снимком просмотра Storage Explorer в браузере Microsoft Edge ... этого недостаточно .

Я загрузил приложение Microsoft Azure Storage Explorer для Windows, и вот, и вот ... Я могу загрузить те же файлы .pdf, которые я загрузил, и могу успешно их просматривать ....

Другие несчастные ублюдки, страдающие микробы, просмотрите изображение и скачайте его. Работали у меня!

?‍♂️

введите описание изображения здесь

0 голосов
/ 06 августа 2020

Проверьте, правильно ли вы установили права доступа к файлу. Обратите внимание на следующее:

         CloudBlobClient blobClient=cloudStorageAccount.CreateCloudBlobClient()
        var blobContainer = blobClient.GetContainerReference("Your Tenant Id");
        await blobContainer.CreateIfNotExistsAsync();

        blobContainer.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Off });<== is this rightly set?
        var blob = blobContainer.GetBlockBlobReference($"Your container/yourfile.pdf");   
        //upload as byte[]       
        await blob.UploadFromByteArrayAsync(your_file_bytes, 0, your_file_bytes.Length);
...