Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net .XLSX的MIME类型问题_Vb.net - Fatal编程技术网

Vb.net .XLSX的MIME类型问题

Vb.net .XLSX的MIME类型问题,vb.net,Vb.net,我有以下代码块:已修改以解决我的问题 'This code is in PAge_load Try fileSrc = getFileInformation(fileID) If fileSrc = "" Then Response.Write("No File Information Returned for File ID: " + fileID) ElseIf fileSrc =

我有以下代码块:已修改以解决我的问题

'This code is in PAge_load
   Try
            fileSrc = getFileInformation(fileID)
            If fileSrc = "" Then
                Response.Write("No File Information Returned for File ID: " + fileID)
            ElseIf fileSrc = "NoAccess" Then
                Response.Write("You do not have access to this file")
            Else
                If InStr(fileSrc, "src=") > 0 Or InStr(fileSrc, "SRC=") > 0 Then
                    fileLoc = parseString(fileSrc)
                    fileSrc = fileLoc
                End If
                Response.Clear()
                contentType = getContentType(fileSrc)
                Response.ContentType = contentType
                If contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" Or contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document" Then
                    Response.AddHeader("Content-Disposition", "attachment; filename=StreamFile" + "." + Label1.Text)
                End If
                Response.WriteFile(fileSrc)
                'Response.End() Commented out to prevent Thread Abort Exceptions being thrown.
                End If
        Catch ex As Exception
            If ex.GetType.ToString.ToLower = "system.threading.threadabortexception" Then

            Else : Response.Write("An Error Occurred During Data Retrieval")

            End If
        End Try
    Else
        Response.Write("An Error Occurred During Data Retrieval")
    End If
    Response.End()    'added back into the code outside of the Try/Catch
当MIME类型的扩展名为.xlsx时,将选择适当的MIME类型 但是,当我尝试单击与.xlsx电子表格相关联的超链接时,会收到一条错误消息


我不知道为什么会发生这种情况,也不知道如何解决这个问题。如果我使用Response.WriteFile(fileSrc)来解析这个URL,这可能就是问题所在吗??我已经查看了IIS 6.0上的MIME类型,并且该MIME类型存在于IIS上。

您必须将MIME类型添加到服务器,以便将其用作MIME类型。如果服务器无法处理MIME类型,仅在代码中声明是不够的


根据服务器,我假设是IIS。如果您使用的是内置的web development server,那么您必须在Google上搜索MIME类型,看看是否有可能添加额外的内容(假设是这样,但从未添加过)。

在开始向流中写入二进制数据之前,您需要使用
Response.Clear()
,完成后,还需要使用
Response.End()
。前者清除可能已经在管道中的任何内容,后者停止可能继续的进一步写入

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Response.Clear()
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
    Response.WriteFile(Server.MapPath("Test.xlsx"))
    Response.End()
End Sub
编辑

好的,我想我在你更新的代码中看到了问题。您已经将所有这些都包装在一个
Try/Catch
中,这听起来不错,直到您深入研究并发现它导致了
ThreadAbortException
。这意味着即使成功,您的
Catch
块也将被调用

您可以删除
Try/Catch
块,也可以尝试使用`

如果您想阅读更多关于此的信息,请查看以下帖子:


@Gregory A Beamer我已将MIME类型添加到IIS中,并在代码中引用了它。在上面的“Select Case”代码中,内容类型被识别为.xlsx,但是当响应.WriteFile(fileSrc)发生时,就会抛出错误(上图)@ErinPackard:我必须稍微使用XSLX,看看WriteFile()是否是问题所在。x表单(DOCX、XSLX、PPTX等)实际上是zip文件(将扩展名更改为zip并打开以查看),因此它们可能必须使用某种类型的二进制编写器来编写。我将在下班后(2小时)尝试重新启动此功能。@Gregory A Beamer我已经尝试了Response.WriteFile(fileSrc)和Response.TransmitFile(fileSrc)。两种方法的结果都一样。还有……有人能解释一下这行代码中的+2在做什么吗?contentType=Mid(fileSrc,fileSrc.LastIndexOf(“.”)+2,4)。我理解Mid函数和LastIndexOf函数,但我不确定+2的作用是什么?我知道“4”将抓取(最多)接下来的4个字符。@Erin Packard,
MID
是以一为基础的,而不是以零为基础的,因此
LastIndexOf
会找到句点,然后为分机添加一个,然后再添加一个,以便从以一为基础转换为以零为基础。是否有
响应。是否清除其中的
?我可以看到,
PK
被返回,这是Office 2007文档的开头,看起来前面有什么东西,或者MIME类型没有正确发送。@Chris Haas我的代码中没有响应。Clear()。我有以下内容:Response.ContentType=ContentType,Response.WriteFile(fileSrc),Response.End()。当前我用于.xlsx文件的MIME类型是:“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”我的机器上没有2007,但我有允许我打开这些类型文档的service pack,我在程序中添加了响应.Clear()的代码,但它没有修复我收到的错误消息(见上图)。我试图将这些值硬编码到我的程序中,以查看这是否可以解决问题,但在Try/Catch块中失败。我删除了Try/Catch,以查看是否可以捕捉到更好的错误消息,因为我的程序不喜欢我文件的Server.MapPath。我删除了该值,但仍然不起作用。我将继续尝试解决此问题sue。还有其他想法吗?我们最近有一些Microsoft更新,也许这就是问题所在。@Erin Packard,您是否也添加了
Response.End()
?我尝试始终使用
Server.MapPath()
但我认为这是因为我从过去养成了这个习惯,如果你不想的话,请不要担心这一部分。我已经在我的问题中添加了一些代码。代码在我的页面加载中。也许这些代码会对我的问题有所帮助。感谢你查看这些并帮助我。除非得到响应,否则该程序无法处理xlsx文件。End()在代码中。我将此代码移到了Try/Catch之外,并移到了代码中最后一个If的下方,以减轻引发的线程中止异常。我还添加了一行代码,最终允许此操作,并通过我的程序打开.xlsx和.docx文档。请查看上面的新代码。