如何从注册表读取文件的ContentType

     有的时候为了不让客户端知道文件的下载地址我们不直接公开文件的url,而是采用Response.WriteFile的形式输出文件,当我们需要直接在客户端的浏览器上打开这个文件的时候问题来了,如果我们不设定Response.ContentType的话,非文本文件在浏览器上直接将会直接输出得到的结果只能是乱码,但是ContentType非常多,如果采用switch-case的方法代码比较臃肿,而且还有可能遗留扩展名,我们打开注册表可以看到每一种文件在注册表中都能找到ContentType(可以按照value查找Content Type关键词看到),既然这样就能尝试从注册表读取ContentType了。下面是一个例子:

using  Microsoft.Win32;

string  filename = @" c:/11.doc " ;
            System.IO.FileInfo fi
= new  System.IO.FileInfo(filename);
            
string  fileextname = fi.Extension;
            
string  DEFAULT_CONTENT_TYPE  =   " application/unknown " ;
            RegistryKey regkey,fileextkey;
            
string  filecontenttype;
            
try  
            {                
                regkey
= Registry.ClassesRoot;                
                fileextkey
= regkey.OpenSubKey(fileextname);                
                filecontenttype
= fileextkey.GetValue( " Content Type " ,DEFAULT_CONTENT_TYPE).ToString();
            }
            
catch
            {
                filecontenttype
= DEFAULT_CONTENT_TYPE;
            }        
            Response.Clear();
            Response.AddHeader(
" Content-Disposition " " inline; filename= "   +  Server.UrlEncode(filename)); 
            Response.ContentType
= filecontenttype;
            Response.WriteFile(filename); 

经过测试发现,虽然ContentType是正确的,但是例如pdf等文件还是打开错误,不知道是什么原因。。。
您可以使用JSP和MySQL实现从数据库读取音乐文件的步骤如下: 1. 在MySQL数据库创建一个音乐文件的表,其包含音乐文件的名称、路径、类型等信息。 2. 在JSP页面编写代码,连接到MySQL数据库,查询音乐文件的表,获取需要的音乐文件信息。 3. 在JSP页面使用HTML5的audio标签或者其他音频播放器插件,将获取到的音乐文件信息呈现在页面上,实现音乐的播放。 下面是一个简单的示例代码: 在MySQL数据库创建一个名为music的表,表包含id、name、path和type四个字段,其id为自增主键。 在JSP页面编写以下代码: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>音乐播放器</title> </head> <body> <h1>音乐列表</h1> <% // 定义数据库连接信息 String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/test?useSSL=false"; String user = "root"; String password = "password"; // 定义SQL查询语句 String sql = "SELECT id, name, path, type FROM music"; // 声明数据库连接和结果集 Connection conn = null; ResultSet rs = null; try { // 加载数据库驱动程序 Class.forName(driver); // 建立数据库连接 conn = DriverManager.getConnection(url, user, password); // 创建Statement对象,执行SQL查询语句 Statement stmt = conn.createStatement(); rs = stmt.executeQuery(sql); // 遍历结果集,输出音乐文件信息 while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); String path = rs.getString("path"); String type = rs.getString("type"); %> <p><a href="<%=path%>" target="_blank"><%=name%></a> (<%=type%>)</p> <% } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭数据库连接和结果集 try { if (rs != null) { rs.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } %> </body> </html> ``` 该示例代码实现了从MySQL数据库读取音乐文件信息,并将其以链接的形式展示在页面上。您可以根据您的实际需求,将其改造成一个完整的音乐播放器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值