通过ashx处理程序读取SQL的BLOB文件时如何在Edge中查看图片及PDF
问题解决方案
核心原因
你当前的乱码问题源于HTTP响应头的Content-Type配置错误:你同时配置了多个MIME类型,浏览器无法识别资源格式,会默认以纯文本形式渲染二进制内容,就会出现乱码。
具体修改步骤
1. 调整ASHX处理程序代码
需要根据文件的实际类型返回对应的单一MIME类型,同时添加Content-Disposition响应头指定内容为内嵌展示:
首先新增MIME类型识别辅助方法:
' 适配所有.NET Framework版本的写法 Private Function GetMimeType(ByVal fileName As String) As String Dim ext As String = System.IO.Path.GetExtension(fileName).ToLowerInvariant() Select Case ext Case ".jpg", ".jpeg" Return "image/jpeg" Case ".png" Return "image/png" Case ".gif" Return "image/gif" Case ".bmp" Return "image/bmp" Case ".pdf" Return "application/pdf" Case ".txt" Return "text/plain" Case Else Return "application/octet-stream" End Select End Function
再修改ProcessRequest方法中的响应逻辑:
If sdr.HasRows Then While sdr.Read() Dim fileName As String = sdr(1).ToString() If Not String.IsNullOrEmpty(fileName) Then Dim fileBytes As Byte() = DirectCast(sdr(2), Byte()) ' 设置正确的单一MIME类型 context.Response.ContentType = GetMimeType(fileName) ' 配置为内嵌展示,同时指定文件名,解决PDF和图片识别问题 context.Response.AddHeader("Content-Disposition", $"inline; filename=""{fileName}""") context.Response.BinaryWrite(fileBytes) context.Response.Flush() End If End While Else context.Response.StatusCode = 404 End If
2. JavaScript调用逻辑无需修改
你原来的window.open("GetImageHandler.ashx?documentid=" + myDocumentID, "_blank");代码完全可用,无需调整。
验证效果
- 图片类型资源:Edge会自动在新窗口渲染图片
- PDF类型资源:Edge内置PDF阅读器会直接在新窗口打开PDF内容,无需额外插件
内容的提问来源于stack exchange,提问作者lmcc
相关产品推荐
相关产品推荐

