因为数据库的改变,将文件图片等以二进制存在mongodb中。需要使用则通过浏览器访问进行下载。
//result是通过数据接口访问取得图片的byte[]数据:
byte[] result = null;
result = mongoService.selectData(collectionName, queryMap);
取得一个文件名
public String getFileName(String collectionName){
String suffix = "";
if(collectionName.contains("png")){
suffix = ".png";
}else if(collectionName.contains("jpg")){
suffix = ".jpg";
}else if(collectionName.contains("doc")){
suffix = ".doc";
}else if(collectionName.contains("docx")){
suffix = ".docx";
}else if(collectionName.contains("excel")){
suffix = ".xls";
}else if(collectionName.contains("bmp")){
suffix = ".bmp";
}else{
suffix = ".txt";
}
//DateTime只是一个工具类
DateTime dt = DateTime.now();
String name = dt.toDateTimeString().replace(" ", "_");
//随机数
Random r = new Random();
int i = r.nextInt(100);
String fileName = name + i + suffix;
return fileName;
}
根据得到的byte[]下载文件,新手,对io流的掌握不得要领,虽然简单,依旧花了点时间刷了一阵子资料,难过,还得恶补一下才行。关于响应的一些设置,参考这位前辈的:https://blog.youkuaiyun.com/luman1991/article/details/53423305
//此处需要设置ISO8859-1,application/octet-stream为未知文件类型时使用
response.setContentType("application/octet-stream;charset=ISO8859-1");
BufferedOutputStream output = null;
try {
output = new BufferedOutputStream(response.getOutputStream());
String fileNameDown = new String(fileName.getBytes(), "ISO8859-1");
//fileNameDown上面得到的文件名
response.setHeader("Content-Disposition", "attachment;filename=" +
fileNameDown);
output.write(result);
response.flushBuffer();
} catch (IOException e) {
e.printStackTrace();
}
然后就可以在浏览器中下载了(图片下载以测试,其他类型文件暂未测试)。