Я пытаюсь загрузить файл PDF из хранилища Azure blob в потоке памяти. Однако когда я пытаюсь открыть файл, он не загружается.

Вот код, который я использую. Загрузить код

    protected void blobDownload_Click(object sender, EventArgs e)
    {
        //Getting the blob storage container values
        DBAccess dbaCon = new DBAccess();
        DataTable dt = dbaCon.GetTrainingRecord(TrainingTrainingRecordID.Value);
        string companyID = dt.Rows[0].Field<string>("fk_company_id");
        string blobStorageName = dt.Rows[0].Field<string>("uploaded_file");
        string filename = dt.Rows[0].Field<string>("display_file_name");

        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
        CloudBlobContainer container = blobClient.GetContainerReference(System.Text.RegularExpressions.Regex.Replace(companyID.ToLower(), @"\s+", ""));
        CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobStorageName);
        MemoryStream memStream = new MemoryStream();
        blockBlob.DownloadToStream(memStream);
        blockBlob.FetchAttributes();
        HttpResponse response = HttpContext.Current.Response;
        //response.ContentType = blockBlob.Properties.ContentType;
        response.ContentType = "application/pdf";
        response.AddHeader("Content-Disposition", "Attachment; filename=" + filename);
        response.AddHeader("Content-Length", blockBlob.Properties.Length.ToString());
        response.BinaryWrite(memStream.ToArray());
    }

В основном приведенный выше код запускается при нажатии кнопки, файл загружается через браузер, но при попытке открыть файл он не может быть загружен. Я зарегистрировался на лазурном портале, и я могу напрямую загрузить файл через лазурный портал, и файл в порядке.

Я попытался напрямую установить тип контента, но, похоже, это не сработало.

Файлы PDF кажутся единственными файлами, которые не работают, которые я тестировал с файлами .jpg и .png, и они загружаются и открываются нормально.

Благодарность

Обновить

Проблема в основном решена, так как проблема связана с тем, как я загружал файлы. Поскольку мне нужно было хранить файлы уникальным образом, мне пришлось изменить имя в хранилище BLOB-объектов, чтобы преодолеть это, я использовал функцию .SaveAs() ниже.

Код загрузки

    private void uploadFile(string blobContainer, string randomFileName)
    {
        // Retrieve storage account from connection string.
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
            CloudConfigurationManager.GetSetting("StorageConnectionString"));

        // Create the blob client.
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

        // Retrieve reference to a previously created container.
        CloudBlobContainer container = blobClient.GetContainerReference(blobContainer);

        // Create the container if it doesn't already exist.
        container.CreateIfNotExists();

        // Retrieve reference to a blob named "randomFileName".
        CloudBlockBlob blockBlob = container.GetBlockBlobReference(randomFileName);

        filMyFile.PostedFile.SaveAs(Server.MapPath("~/") + randomFileName);

        // Create or overwrite the "myblob" blob with contents from a local file.
        using (filMyFile.PostedFile.InputStream)
        {
            blockBlob.UploadFromStream(filMyFile.PostedFile.InputStream);
        }
    }

Файл загружается нормально в Edge и Chrome, однако в Firefox имя сокращается, а расширение файла отсутствует. На следующем снимке экрана показана проблема. Mozilla pdf download

1
Hayden Passmore 15 Фев 2018 в 04:05

1 ответ

Лучший ответ

Судя по моему тесту, ваш код корректно работает на моей стороне. PDF-файл не должен отличаться от других BLOB-объектов. Поскольку в хранилище BLOB-объектов нет типа файла, это просто имя BLOB-объекта. Тип расширения известен для ОС.

Я рекомендую вам удалить файл с именем xxx.pdf. Как правило, нам также нужен PDF-ридер для чтения PDF-файла. Если установлен браузер Microsoft Edge, вы можете открыть файл .pdf напрямую.

enter image description here

Обновлено:

Поскольку firefox может настроить его для сохранения файла напрямую, тогда он должен работать.

enter image description here

5
Tom Sun - MSFT 15 Фев 2018 в 06:06