Почему браузеры на iPhone/iPad не могут загружать/просматривать файлы docx?
Мое веб-приложение позволяет конечным пользователям загружать и хранить документы в базе данных. И они тоже могут скачать эти документы из приложения.
Поведение загрузки документов настолько просто, что пользователь нажимает ссылку "загрузить этот документ" в графическом интерфейсе, я буду запрашивать двоичные данные документа из базы данных на основе входного параметра documentID, запрошенного у клиента. После этого я отвечу на байтовые данные клиенту.
Давайте посмотрим мой код.
Это функция, в которой я получаю запросы на загрузку документов от клиента.
Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest Dim DocumentID As String = getParameter("DocumentID", context) DocumentWrapper.Download(DocumentID) context.Response.Write("<script language=javascript>window.open('','_self','');window.close();</script>") End Sub
И это функция, с помощью которой я запрашиваю двоичные данные и отвечаю на них клиенту.
Public Shared Sub Download(ByVal documentId As String) Dim contentType As String = String.Empty Dim bytes As Byte() = Nothing Dim docItem As DocumentEntity = New DocumentEntity() If (documentId IsNot Nothing) Then docItem = New DocumentDao().SelectByDocumentID(documentId) If Not String.IsNullOrEmpty(docItem.auto_key.Trim()) Then HttpContext.Current.Response.Clear() HttpContext.Current.Response.ClearContent() HttpContext.Current.Response.ClearHeaders() HttpContext.Current.Response.ContentType = GetContentType(docItem.fileexten) HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" & docItem.filename.Trim & "." & docItem.fileexten.Trim) If (docItem.document IsNot Nothing) AndAlso (docItem.document IsNot System.DBNull.Value) Then HttpContext.Current.Response.BinaryWrite(docItem.document) End If HttpContext.Current.Response.Flush() HttpContext.Current.Response.Close() HttpContext.Current.Response.End() End If End If End Sub End Class
Теперь мои пользователи загружают файл docx из моего веб-приложения.
- На iPad и iPhone: когда они нажимают на ссылку для загрузки этого docx, браузеры (Safari, Chrome) просто открывают новую пустую вкладку. И никакие файлы не загружаются, или даже если мы не можем просмотреть содержимое docx в этой новой вкладке.
- Но браузеры (Safari, Chrome) на MAC или ПК все еще работают нормально. Docx можно загрузить, как и ожидалось. (Когда мы нажмем на ссылку для загрузки docx, откроется новая вкладка. Затем появится диалоговое окно Сохранить файл, в котором вам будет предложено указать место для сохранения файла. После того, как мы сохраним Файл, Новая вкладка в браузере будет закрыта автоматически).
- Если мы переключимся на загрузку doc-файла (не docx), Safari/Chome на iPad/iPhone откроет новую вкладку и отобразит содержимое этого doc-файла (режим предварительного просмотра), и это не позволит нам загрузить этот файл, а просто позволит просмотреть файл.
Итак, мои вопросы здесь заключаются в том, почему браузеры на iPad/iPhone не могут загрузить docx? Можно ли вообще это сделать? Или это ожидаемое поведение iOS для iPad/iPhone для обеспечения безопасности конечного пользователя?
Пожалуйста, дайте мне совет! Большое спасибо!
Что я уже пробовал:
Я проверил и сравнил поведение браузеров (Safari, Chrome) между Android, iOS и Windows, как описано в разделе "опишите проблему" выше