Загрузка Excel .xlsx — сообщение об ошибке нарушения совместного доступа при комбинации «Открыть» и «Сохранить»

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

Итак, мы создаем файл Excel (.xlsx) на сервере и загружаем его клиенту, используя «вложение» содержимого. Появится диалоговое окно «Открыть сохранение», и все будет работать нормально, если вы выберете «Сохранить» или «Открыть», а затем «Сохранить как...». изменения не могут быть сохранены в «Export[5].xlsx» из-за нарушения общего доступа. Попробуйте сохранить в другой файл. то: Файл, который вы пытаетесь открыть «F8CAC020.IE5\HM2NBE5C\F8CAC020», имеет формат, отличный от указанного в расширении файла. Прежде чем открывать файл, убедитесь, что файл не поврежден и получен из надежного источника. Хотите открыть файл сейчас? затем: вы, наконец, получите диалоговое окно «Сохранить как:» (при условии, что вы нажали «Да»).

Код для создания файла:

Response.Clear()
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AppendHeader("content-disposition", "attachment;filename=Export.xlsx")
Response.AddHeader("Content-Length", New System.IO.FileInfo(NewFile).Length)
Response.TransmitFile(NewFile)
Response.Flush()

Если вы удалите заголовок content-disposition, вы получите правильное поведение в Excel, но с неправильным именем и без гарантии того, что документ Excel не будет отображаться в браузере (в зависимости от настроек клиента). Если вы нажмете «Открыть», а затем «Сохранить», вы получите сообщение: «default.aspx» доступен только для чтения. Чтобы сохранить копию, нажмите «ОК», затем дайте книге новое имя в диалоговом окне «Сохранить как».

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

Ваше здоровье,

Джеймс


person James Birch    schedule 23.08.2011    source источник


Ответы (1)


Я полагаю, что в коде загрузки файла IE есть ошибка, которая не подтверждает завершенную передачу файла (загрузку) с веб-сервера, поэтому соединение с загруженным (временным) файлом остается открытым при попытке сохранения. Это генерирует сообщение «нарушение совместного использования». Я попробовал тот же код с FireFox, и я не получил того же результата, что, безусловно, наводит меня на мысль, что это проблема, специфичная для IE.

К сожалению, учитывая, что я считаю это ошибкой в ​​IE, я не думаю, что в настоящее время существует четкое решение этой проблемы.

person David    schedule 17.11.2011