我是在页面有一个链接,一点击就打开下载对话框,选择一个保存的地方,然后从数据库取得内容写入刚才选择的地方.
我现在的问题是:
1、打开下载对话框时,不可以选择文件类型,不知道为什么
2、我想在打开下载对话框时,默认给一个名字和扩展名
3、下载完后打开是乱码
请问以上3个问题怎么解决?
下面是我在另外一个问题中回答的内容:
你把参数提交给后台我这里是Servlet,然后根据参数取出你要的数据组装成字符串或者生成你需要的文档的文件流。输出到response.getOutputStream()就可以实现下载了。
下面是Servlet代码:
[code="java"]
OutputStream outputStream = null;
try {
response.setCharacterEncoding("UTF-8");
outputStream = new BufferedOutputStream(response.getOutputStream());
String fileName = "fileName.txt";
response.setContentType("application/data");
response.setHeader("content-disposition", "attachment;filename=\""+ new String(fileName.getBytes(), response.getCharacterEncoding()) + "\"");//设置下载的时候弹出保存提示的文件名
String temp="导出文件内容";
outputStream.write(temp.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
[/code]
在你的链接出写如onclick方法我这里用的是button基本上也应该对你有帮助
this.document.forms[0].target="_self";
this.document.forms[0].fileName.value=fileName;
this.document.forms[0].method.value="downLoad";
this.document.forms[0].submit();
}
后台部分:
if(method != null && "downLoad".equals(method)){
forward = this.downLoadFormDB(request,response);
}
private String downLoadFormDB(HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setContentType("application/download");
String fileName = request.getParameter("fileName");
response.setHeader("Content-Disposition", "attachment;filename="
+ fileName);
ServletOutputStream out = response.getOutputStream();
BufferedWriter bufferWriter = new BufferedWriter(new OutputStreamWriter(out));
String line = null;
int flushThreshold = 200;
int count = 0;
// Get inputStream from db.
ExportPOSSAMCardService service = new ExportPOSSAMCardService();
BufferedReader bufferedReader = null;
try {
InputStream is = service.getBlobInputStream(fileName);
bufferedReader = new BufferedReader(new InputStreamReader(is));
while ((line = bufferedReader.readLine()) != null) {
bufferWriter.write(line);
bufferWriter.newLine();
count++;
if (count % flushThreshold == 0) {
bufferWriter.flush();
}
}
} catch (Exception e) {
log.error(e.getMessage(), e);
throw e;
} finally {
if (bufferedReader != null)
bufferedReader.close();
bufferWriter.flush();
bufferWriter.close();
}
return "";
}
至于你的问题:
你可以自由设定文件名和默认扩展名, (提前写好就行,可以专门在后台写个文件名生成的方法来获取)
至于乱码问题 应该和你文件生成的编码方式有关:需要统一编码方式, 个人倾向UTF-8