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
块,也可以尝试使用`
如果您想阅读更多关于此的信息,请查看以下帖子:
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文档。请查看上面的新代码。