为啥 iPhone/iPad 上的浏览​​器无法下载/预览 docx 文件?

Posted

技术标签:

【中文标题】为啥 iPhone/iPad 上的浏览​​器无法下载/预览 docx 文件?【英文标题】:Why browsers on iPhone/iPad cannot download/preview docx files?为什么 iPhone/iPad 上的浏览​​器无法下载/预览 docx 文件? 【发布时间】:2018-10-29 10:35:51 【问题描述】:

我的 Web 应用程序允许最终用户上传文档并将其存储在数据库中。他们也可以从应用程序下载这些文件。

下载文档的行为非常简单,用户在 GUI 上单击“下载此文档”链接,我将根据客户端请求的输入 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 内容。

但是,MAC 或 PC 上的浏览​​器(Safari、Chrome)仍然可以正常工作。 docx 可以按预期下载。 (当我们单击链接下载 docx 时,将打开一个新选项卡。然后,将显示一个保存文件对话框,询问您保存文件的位置。保存文件后,浏览器上的新选项卡将自动关闭)。

如果我们切换到下载 doc 文件(不是 docx),iPad/iPhone 上的 Safari/Chome 将打开一个新选项卡并显示该 doc 的内容strong> 文件(预览模式),它不允许我们下载该文件,只允许预览文件。

所以,我的问题是为什么 iPad/iPhone 上的浏览​​器无法下载 docx?有没有办法做到这一点?或者这是 iPad/iPhone 的 ios 为保护最终用户而采取的预期行为?

【问题讨论】:

有人否决了我的问题。为什么? 【参考方案1】:

我找到了这个问题的解决方案。只需为 docx 返回正确的 ContentType https://docs.microsoft.com/en-us/previous-versions/office/office-2007-resource-kit/ee309278(v=office.12)

【讨论】:

以上是关于为啥 iPhone/iPad 上的浏览​​器无法下载/预览 docx 文件?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone/iPad 浏览器模拟器? [关闭]

iPhone / iPad / iPod 滑动事件 javascript

在播放框架中渲染视频

iPhone OK,但不是 iPad .. 为啥?

iOS - 如何通过 Objective-C 定位我的 iPad/iPhone 上的所有文件

CSS 跨浏览器问题 - 旋转在 Safari、Ipad 和 Iphone 上不起作用