[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 2,数据的删 ...
- Eureka系列(一)Eureka功能介绍
Eureka核心功能点 服务注册(register): Client会发送一次Rest请求给Server端来实现注册,Server接受到请求会将服务信息存储起来,并将注册信息给同集群其他Serve ...
- mini-web框架-WSGI-mini-web框架-多进程,面向对象的服务器(5.1.1)
@ 目录 1.说明 2.代码 关于作者 1.说明 使用多进程 积极主动python多进程是复制资源,线程是共享变量 所以这个的socket要关两次,因为复制文件的时候,是把文件的fd给复制过去(fil ...
- yii\filters\AccessControl 访问权限控制
Class yii\filters\AccessControl 所有类 | 属性 | 方法 继承 yii\filters\AccessControl » yii\base\ActionFilter ...
- 最全Python正则表达式来袭
前言 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"))操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成 ...
- Autofac的基本使用---目录
目录 Autofac的基本使用---1.前言 Autofac的基本使用---2.普通类型 Autofac的基本使用---3.泛型类型 Autofac的基本使用---4.使用Config配置 Autof ...
- Dubbo SPI源码解析①
目录 0.Java SPI示例 1.Dubbo SPI示例 2.Dubbo SPI源码分析 SPI英文全称为Service Provider Interface.它的作用就是将接口实现类的全限定名 ...
- Kotlin 简单使用手册
在昨天和做android的前辈一番交谈后,觉得很惭愧,许多东西还只是知其然而不知其所以然,也深感自己的技术还太浅薄.以后要更加努力地学习,要着重学习原理.方法论,不能只停留在会用的阶段. 今天又要献丑 ...
- @Transient 注解
使用 @Transient 表示该属性并非是一个要映射到数据库表中的字段,只是起辅助作用.ORM框架将会忽略该属性
- grpc系列- protobuf详解
Protocol Buffers 是一种与语言.平台无关,可扩展的序列化结构化数据的方法,常用于通信协议,数据存储等等.相较于 JSON.XML,它更小.更快.更简单,因此也更受开发人员的青眯. 基本 ...