Мое веб-приложение позволяет конечным пользователям загружать и хранить документы в базе данных. И они тоже могут загрузить эти документы из приложения.
Поведение загрузки документов настолько простое, что пользователь щелкает ссылку «Загрузить этот документ» в графическом интерфейсе, я буду запрашивать двоичные данные документа из базы данных на основе параметра входного 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 : при нажатии на ссылку для загрузки этого документа браузеры (Safari, Chrome) просто открывают новую пустую вкладку. И никакие файлы не загружаются, или даже если мы не можем предварительно просмотреть содержимое docx на этой новой вкладке.
НО, браузеры (Safari, Chrome) на MAC или ПК по-прежнему работают нормально. Док может быть в состоянии загрузить, как ожидалось. (Когда мы щелкаем ссылку для загрузки документа, открывается новая вкладка. Затем открывается диалоговое окно «Сохранить файл», в котором вас спрашивают, куда сохранить файл. После того, как мы сохраним файл, в браузере появится новая вкладка. быть закрыто автоматически).
Если мы перейдем к загрузке файла doc (не docx), Safari / Chome на iPad / iPhone откроет новую вкладку и отобразит содержимое этого doc файл (режим предварительного просмотра), и он не позволяет нам загружать этот файл, просто позволяет предварительно просмотреть файл.
Итак, мой вопрос здесь: почему браузеры на iPad / iPhone не могут загрузить docx? Есть ли способ сделать это? Или это ожидаемое поведение iOS для iPad / iPhone для защиты конечного пользователя?