复习下Servlet下载文件,
- 当
response
把ContentType
设置成application/xxxx
的时候呢,浏览器会默认启动下载,而不是试图打开。 - 通过给httpHeader里面加入内容描述
Content-Disposition
来告知浏览器文件名称等信息。
中文时,URLEncoder.encode
下下更健康。 - 如果要通过Response拿到的输出流写中文出去的话,要先设置
response.setCharacterEncoding("UTF-8");
,写成小写的utf-8
不好使? - 通过
response.setConetentLength(Long)
告诉浏览器response
要写出的文件有多少字节。不设置的话就是不知道多少,下完为此,没有进度条之类的东东。
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// System.out.println("I'm get your request!!");
response.setCharacterEncoding("UTF-8");
response.setContentType("application/txt");
response.addHeader("Content-Disposition", "attachment; filename="+URLEncoder.encode("中国通号门户.url","utf-8"));
Writer w = response.getWriter();
w.write("[InternetShortcut]
"
+ "URL=http://w3.crsc.isc
"
+ "IDList=
"
+ "HotKey=0
"
+ "IconFile=%windir%\system32\SHELL32.dll
"
+ "IconIndex=130
"
+ "[{000214A0-0000-0000-C000-000000000046}]
"
+ "Prop3=19,2");
w.close();
}
大家都知道,像下面这种内容,写入到txt文本中,然后更改文件扩展名为.url
就直接是一个url快速链接了。
[InternetShortcut]
URL=http://w3.crsc.isc
IDList=
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2
所以呢,只要有Servlet里面把这些内容用txt的格式通过response
写出来就好了,然后给一个明确的文件名与后缀就好了。