Не удается загрузить PDF-файл из Azure при повторном открытии.

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

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

    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


person Hayden Passmore    schedule 15.02.2018    source источник
comment
Я тоже могу попробовать, ваш код загрузки отлично работает @Hayden Passmore   -  person Saravanakumar Natarajan    schedule 15.02.2018
comment
Спасибо @Saravanakumar, я обновил свой вопрос, так как у меня все еще есть проблемы.   -  person Hayden Passmore    schedule 15.02.2018
comment
добавлено расширение проверки имени файла или нет @Hayden Passmore   -  person Saravanakumar Natarajan    schedule 15.02.2018
comment
Просто прошагал через код и есть расширение, например randomFileName = 7H0R4Q0LA947201802151333414474_TrainingRecord.pdf   -  person Hayden Passmore    schedule 15.02.2018
comment
Для firefox мы можем настроить его так, чтобы он сохранял файл напрямую, тогда он должен работать. Я тоже обновляю ответ.   -  person Tom Sun - MSFT    schedule 15.02.2018
comment
Вы также можете настроить blob perporty blockBlob.Properties.ContentType = "application/pdf"; перед загрузкой;   -  person Tom Sun - MSFT    schedule 15.02.2018


Ответы (1)


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

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

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

Обновлено:

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

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

person Tom Sun - MSFT    schedule 15.02.2018
comment
Привет, спасибо за быстрый ответ. Я понял, что проблема была в том, как я загружал файлы. Поскольку я пытался переименовать файл при загрузке. Мне пришлось использовать функцию .SaveAs() HttpPostedFile. Он работает для Chrome и Edge, но не работает с Mozilla. - person Hayden Passmore; 15.02.2018