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

时间:2018-10-29 10:35:52

标签: ios .net iphone ipad download

我的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

现在,我的用户从我的Web应用程序下载docx文件。

  • 在iPad和iPhone上:当他们单击链接下载该docx时,浏览器(Safari,Chrome)只需打开一个新的空白标签即可。而且没有文件下载,即使我们无法在该新标签页中预览docx内容。

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

  • 如果我们切换为下载 doc 文件(而非docx),则iPad / iPhone上的Safari / Chome将打开一个新标签,并显示该 doc 文件的内容文件(预览模式),并且不允许我们下载该文件,而只能预览该文件。

所以,我的问题是,为什么iPad / iPhone上的浏览器无法下载docx?反正有这样做吗?还是这可能是iOS为iPad / iPhone保护最终用户的行为?

1 个答案:

答案 0 :(得分:0)

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