[java]文件上传下载删除与图片预览
图片预览
@GetMapping("/image")
@ResponseBody
public Result image(@RequestParam("imageName") String imageName, HttpServletResponse response) {
// 判断图片是否存在
int result = HbaseUtil.fileIsExist(Constant.tableName, imageName);
if (result == -1) {
return ResultUtil.fileNotFoundError();
} else{
InputStream in = null;
ServletOutputStream sos = null;
try {
FunctionSelect.fileGetF(Constant.tableName, imageName, Constant.downloadTmpDir);
File file = new File(Constant.downloadTmpDir + "/" + imageName);
in = new FileInputStream(file);
sos = response.getOutputStream();
byte[] b = new byte[1024];
while (in.read(b) != -1) {
// 写出
sos.write(b);
}
//刷新
sos.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
//关闭文件读取流,输出流
in.close();
sos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
文件下载
本质和图片预览一样,都是输出字节流,不过文件下载加了一个强制下载。
/**
* 1. 判断文件是否存在 2.设置下载文件
*
* @param filename
* @param response
* @return
*/
@GetMapping("/download")
@ResponseBody
public Result download(@RequestParam("filename") String filename, HttpServletResponse response) {
int result = HbaseUtil.fileIsExist(Constant.tableName, filename);
if (result == -1) {
return ResultUtil.fileNotFoundError();
} else {
try {
// 文件download到服务器上
// TODO: 2020/12/22 这里需要控制文件数量或者总文件夹大小 以便于做进一步的缓存
// todo: 需要做一个定时任务,定期删除文件夹中超过30天的文件。(done)
FunctionSelect.fileGetF(Constant.tableName, filename, Constant.downloadTmpDir);
// 根据路径和文件名创建文件
// TODO: 2020/12/22 此处逻辑需要修改 去掉lob文件夹 修改之前的代码(Completed)
File file = new File(Constant.downloadTmpDir + "/" + filename);
//File file = new File(realPath , fileName);
if (file.exists()) {
// 设置强制下载不打开
response.setContentType("application/force-download");
// 设置文件名
response.addHeader("Content-Disposition", "attachment;fileName=" + filename);
byte[] buffer = new byte[1024];
FileInputStream fis = null;
BufferedInputStream bis = null;
try {
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
OutputStream os = response.getOutputStream();
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
} catch (Exception e) {
e.printStackTrace();
return ResultUtil.unknownError();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
return ResultUtil.unknownError();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
return ResultUtil.unknownError();
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
return ResultUtil.unknownError();
}
}
return null;
}
[java]文件上传下载删除与图片预览的更多相关文章
- 2013第38周日Java文件上传下载收集思考
2013第38周日Java文件上传&下载收集思考 感觉文件上传及下载操作很常用,之前简单搜集过一些东西,没有及时学习总结,现在基本没啥印象了,今天就再次学习下,记录下自己目前知识背景下对该类问 ...
- java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载
java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载 实现功能:zip文件上传,后台自动解压,Jstree树目录(遍历文件),editor.md预览 采用Spring+Sp ...
- SpringMVC ajax技术无刷新文件上传下载删除示例
参考 Spring MVC中上传文件实例 SpringMVC结合ajaxfileupload.js实现ajax无刷新文件上传 Spring MVC 文件上传下载 (FileOperateUtil.ja ...
- Java文件上传下载原理
文件上传下载原理 在TCP/IP中,最早出现的文件上传机制是FTP.它是将文件由客户端发送到服务器的标准机制. 但是在jsp编程中不能使用FTP方法来上传文件,这是由jsp运行机制所决定的 文件上传原 ...
- java FTP 上传下载删除文件
在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件 ...
- Struts2 文件上传,下载,删除
本文介绍了: 1.基于表单的文件上传 2.Struts 2 的文件下载 3.Struts2.文件上传 4.使用FileInputStream FileOutputStream文件流来上传 5.使用Fi ...
- java文件上传下载
文件上传首先要引入两个核心包 commons-fileupload-1.2.1.jar commons-io-1.4.jar 下面是对文件上传和下载的一些代码做的一个简单封装,可以方便以后直接使用[使 ...
- java 文件上传 下载 总结
首先引入2个jar 上运行 ...
- win7开机登录界面壁纸修改
1.选择一张自己喜欢的图(一定要是jpg格式,亲测png格式不行),分辨率最好和自己电脑的分辨率差不多. 2.将图片改名为"backgroundDefault.jpg": 3.按下 ...
- PhPMyadmin拿Shell
phpmyadmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具, --百度百科 1.入口寻找 目录扫描: 根据Linux对大小写敏感判断目标服 ...
- Java学习_反射
什么是反射? 反射就是Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息. 反射是为了解决在运行期,对某个实例一无所知的情况下,如何调用其方法. JAVA反射机制是在运行状 ...
- 解决在Filter中读取Request中的流后, 然后再Control中读取不到的做法
摘要: 大家知道, StringMVC中@RequestBody是读取的流的方式, 如果在之前有读取过流后, 发现就没有了. 我们来看一下核心代码: filter中主要做的事情, 就是来校验请求是否合 ...
- 使用swagger上传文件
经常使用swagger,可以通过设置[ProducesResponseType]标记接口的返回信息:swagger也能通过接口的参数列表,自动获得发送的数据结构信息. 不过有一个例外,就是上传文件的时 ...
- Javaweb前台界面代码复用总结
servlet声明定义message信息传给前天界面判断输出message: if(booknamelist.size()==0) { message="根据书名查询没有结果!"; ...
- JSP 的 4 种作用域?
page:代表与一个页面相关的对象和属性. request:代表与客户端发出的一个请求相关的对象和属性.一个请求可能跨越多个页面,涉及多个 Web 组件:需要在页面显示的临时数据可以置于此作用域. s ...
- jstat gcutil
QQA: jstat gcutil 的输出是什么意思 当 Java 程序有性能问题时,尤其是响应时间有突然变化时,最好第一时间查看 GC 的状态.一般用 jstat -gcutil <pid&g ...