Я пытаюсь загрузить файл 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 имя сокращается, а расширение файла отсутствует. На следующем снимке экрана показана проблема.
randomFileName
= 7H0R4Q0LA947201802151333414474_TrainingRecord.pdf - person Hayden Passmore   schedule 15.02.2018blockBlob.Properties.ContentType = "application/pdf";
перед загрузкой; - person Tom Sun - MSFT   schedule 15.02.2018