要求:上传txt的文本内容与生成txt的文本内容保存一致
js实现(生成内容较为简单的TXT文本,不注重格式,自动换行)
// 生成有内容的TXT文件
function createTxt(filename, text) {
var pom = document.createElement('a');
pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
pom.setAttribute('download', filename);
if (document.createEvent) {
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, true);
pom.dispatchEvent(event);
} else {
pom.click();
}
}
java后台实现:数据库字段选用的是longtext类型,它会保存你原有的的文本格式,包括换行、tab...生成txt文本时不会改文本格式。
生成文件流返回给前端页面,如果你用的是ROSE框架,用Invocation inv响应就可以了,如果不是,那就用HttpServletResponse response响应。
案例一:
/* 导出txt文件
* @author lenian
* @param response
* @param text 导出的字符串
* @return
*/
@Get("exportTxt")
@Post("exportTxt")
public void exportTxt(Invocation inv, @Param("id") @DefValue("1") Integer id){
Courseinfo info = dao.find(id);
String text = info.getAccessories();
String filename = info.getKkxq()+ info.getKcmc() +"课程标准";
inv.getResponse().setCharacterEncoding("utf-8");
//设置响应的内容类型
inv.getResponse().setContentType("text/plain");
//设置文件的名称和格式
inv.getResponse().addHeader("Content-Disposition","attachment;filename=" + genAttachmentFileName( filename, "JSON_FOR_UCC_") + ".txt");
BufferedOutputStream buff = null;
ServletOutputStream outStr = null;
try {
outStr = inv.getResponse().getOutputStream();
buff = new BufferedOutputStream(outStr);
buff.write(text.getBytes("UTF-8"));
buff.flush();
buff.close();
} catch (Exception e) {
//LOGGER.error("导出文件文件出错:{}",e);
} finally {
try {
buff.close();
outStr.close();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// 设置名称格式,没有这个中文名称无法显示
public String genAttachmentFileName(String cnName, String defaultName) {
try {
cnName = new String(cnName.getBytes("gb2312"), "ISO8859-1");
} catch (Exception e) {
cnName = defaultName;
}
return cnName;
}
案例二:
/* 导出txt文件
* @author lenian
* @param response
* @param text 导出的字符串
* @return
*/
@Get("exportTxt")
@Post("exportTxt")
public void exportTxt(Invocation inv, @Param("id") @DefValue("1") Integer id){
Courseinfo info = dao.find(id);
String text = info.getAccessories();
String filename = info.getKkxq()+ info.getKcmc() +"xx标准";
inv.getResponse().setCharacterEncoding("utf-8");
//设置响应的内容类型
inv.getResponse().setContentType("text/plain");
//设置文件的名称和格式
inv.getResponse().addHeader("Content-Disposition","attachment;filename=" + genAttachmentFileName( filename, "JSON_FOR_UCC_") + ".txt");
ServletOutputStream outStr = null;
try {
outStr = inv.getResponse().getOutputStream();
StringReader reader = new StringReader(text);
OutputStreamWriter writer = new OutputStreamWriter(outStr,"utf-8");
BufferedWriter bufferedWriter = new BufferedWriter(writer);
BufferedReader bufferedReader = new BufferedReader(reader);
String brString= bufferedReader.readLine();
while(brString != null){
bufferedWriter.write(brString);
bufferedWriter.newLine();
brString= bufferedReader.readLine();
}
bufferedWriter.flush();
bufferedWriter.close();
writer.close();
} catch (Exception e) {
//LOGGER.error("导出文件文件出错:{}",e);
}
}
经测试,案例二对两种空格都支持。
注意:本文归作者所有,未经作者允许,不得转载