Почему браузеры на iPhone / iPad не могут загружать / просматривать файлы docx? - PullRequest
0 голосов
/ 29 октября 2018

Мое веб-приложение позволяет конечным пользователям загружать и хранить документы в базе данных. И они тоже могут загрузить эти документы из приложения.

Поведение загрузки документов настолько простое, что пользователь щелкает ссылку «Загрузить этот документ» в графическом интерфейсе, я буду запрашивать двоичные данные документа из базы данных на основе параметра входного 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 для защиты конечного пользователя?

1 Ответ

0 голосов
/ 30 октября 2018

Я нашел решение для этого вопроса. Просто верните правильный ContentType для DOCX https://docs.microsoft.com/en-us/previous-versions/office/office-2007-resource-kit/ee309278(v=office.12)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...