为啥 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 / iPod 滑动事件 javascript