文件上传与下载压缩

文件上传:

这是一个通用的本地文件的上传代码,可以将文件类型存储到相应的本地目录下

注:本次演示为存储路径为项目所在的resources目录下,可通过url去访问本地文件数据适用于图片文本等的图片上传组件

    // 保存的路径,相对路径,此处为项目resources目录下位置
private String relativePath = "src/main/resources"; @PostMapping(value = "/upload")
@Transactional
@ResponseBody
public void upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException {
if (ObjectUtil.isNull(file) || StrUtil.isBlank(filename)) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "文件或文件名为空");
} //1.创建文件夹
// 获取resource目录下路径
File directory = new File(relativePath);
//自定义路径
String uploadPath = directory.getCanonicalPath()+ "/static/upload/";
File uploadFolder = new File(uploadPath);
if (!uploadFolder.exists()) {
uploadFolder.mkdirs();
} //2.保存文件
String filename = file.getOriginalFilename();
//添加随机的UUID,文件重命名
String rename = filename.substring(0, filename.lastIndexOf(".")) + "_" + RandomUtil.randomString(16);
//文件后缀
String suffix = filename.substring(filename.lastIndexOf(".") + 1);
//完整文件名
String longName = rename +"."+ suffix; file.transferTo(new File(uploadFolder, longName));
//浏览器访问该静态资源路径
String urlPath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/upload/" + longName; //3.存储附件表
Attachments att = new Attachments();
att.setFileName(longName);
att.setPath("/upload/"+longName);
att.setUrlPath(urlPath);
attachementsMapper.insert(att);
}

文件下载并添加到zip中进行下载

   @GetMapping(value = "/downloadZip")
@Transactional
public void downloadZip(HttpServletResponse response, HttpServletRequest request) throws IOException { //1. 设置响应头
response.setCharacterEncoding("utf-8");
response.setContentType("application/oct-stream");
// 返回客户端浏览器的版本号、类型
String agent = request.getHeader("USER-AGENT");
// 设置压缩包的名字,date为时间戳
Instant now = Instant.now();
long timestamp = now.toEpochMilli();
String time = String.valueOf(timestamp);
String downloadName = time + ".zip";
try {
// 针对IE或者以IE为内核的浏览器:
if (agent.contains("MSIE") || agent.contains("Trident")) {
downloadName = URLEncoder.encode(downloadName, StandardCharsets.UTF_8);
} else {
// 非IE浏览器的处理:
downloadName = new String(downloadName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
}
} catch (Exception e) {
throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "系统异常");
}
final String charset = ObjectUtil.defaultIfNull(response.getCharacterEncoding(), CharsetUtil.UTF_8);
response.setHeader("Content-Disposition", StrUtil.format("attachment;filename=\"{}\"",
URLUtil.encode(downloadName, CharsetUtil.charset(charset)))); //2.取得文件列表
List<Attachments> attachmentList=Lists.newArrayListWithCapacity(10); //3.遍历压缩
// 设置压缩流:直接写入response,实现边压缩边下载(@Cleanup用法类似于try-catch异常并主动关闭流)
@Cleanup OutputStream outputStream = response.getOutputStream();
@Cleanup ZipOutputStream zipOs = new ZipOutputStream(outputStream);
// 设置压缩方法
zipOs.setMethod(ZipOutputStream.DEFLATED);
// 遍历文件信息(主要获取文件名/文件路径等)
for (Attachments a : attachmentList) {
String filename = a.getFileName();
String contextPath = "/upload/" + f.getFileName();
File file = new File(contextPath);
Assert.isTrue(file.exists(), "文件不存在");
zipOs.putNextEntry(new ZipEntry(filename));
@Cleanup FileInputStream fs = new FileInputStream(file);
IOUtils.copy(fs, zipOs);
}
}

Java文件上传与下载压缩的更多相关文章

  1. java文件上传和下载

    简介 文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ...

  2. Java文件上传与下载

    文件上传与下载可谓上网中的常见现象.apache为我们准备了用于文件上传与下载的两个jar包(commons-fileupload-1.2.1.jar,commons-io-1.4.jar).我们在w ...

  3. Java 文件上传与下载、email

    1. 文件上传与下载 1.1 文件上传 文件上传,要点: 前台: 1. 提交方式:post 2. 表单中有文件上传的表单项: <input type="file" /> ...

  4. common-fileupload组件实现java文件上传和下载

    简介:文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ...

  5. selenium java 文件上传、下载

    1.webdriver对页面文件的下载 我们一般操作浏览器下载时会让我们选择下载的目录然后经过一系列操作后才进行文件下载操作,但是用webdriver不能按这样的方式操作.经过查询资料找到了如下的实现 ...

  6. java文件上传、下载、图片预览

    多文件保存到本地: @ResponseBody    @RequestMapping(value = "/uploadApp",produces = { "applica ...

  7. 2013第38周日Java文件上传下载收集思考

    2013第38周日Java文件上传&下载收集思考 感觉文件上传及下载操作很常用,之前简单搜集过一些东西,没有及时学习总结,现在基本没啥印象了,今天就再次学习下,记录下自己目前知识背景下对该类问 ...

  8. SpringMVC文件上传和下载的实现

    SpringMVC通过MultipartResolver(多部件解析器)对象实现对文件上传的支持. MultipartResolver是一个接口对象,需要通过它的实现类CommonsMultipart ...

  9. java web学习总结(二十四) -------------------Servlet文件上传和下载的实现

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  10. java文件上传下载

    文件上传首先要引入两个核心包 commons-fileupload-1.2.1.jar commons-io-1.4.jar 下面是对文件上传和下载的一些代码做的一个简单封装,可以方便以后直接使用[使 ...

随机推荐

  1. springboot下添加全局异常处理和自定义异常处理

    前言 在spring项目中,优雅处理异常,好处是可以将系统产生的全部异常统一捕获处理,自定义的异常也由全局异常来捕获,如果涉及到validator参数校验器使用全局异常捕获也是较为方便. 相关代码: ...

  2. 怎么在Android项目中导入ffmpeg库?

    1.前言 在这里我以导入静态库(.a)为例进行分析,动态库(.so)是类似的.在导入前,各位要先编译好ffmpeg库,需要注意的是在编译的时候要开启交叉编译,目标平台为Android,其他平台的库(w ...

  3. 公私两用U盘管理软件:保障企业数据安全

    随着信息技术的不断发展,企业对数据安全的关注程度越来越高.U盘作为一种便携式的移动存储设备,在工作中被广泛使用,但其本身也存在很多安全隐患,会面临数据泄漏和未经授权访问的风险.例如:企业研发部机密文档 ...

  4. 【大语言模型基础】60行Numpy教你实现GPT-原理与代码详解

    写在前面 本文主要是对博客 https://jaykmody.com/blog/gpt-from-scratch/ 的精简整理,并加入了自己的理解. 中文翻译:https://jiqihumanr.g ...

  5. 一个ssh无法远程登录的问题跟踪解决

    用户反馈龙芯服务器系统loongnix-server使用root用户ssh远程登录,有时候可以有时候又无法登录,频繁出现错误:Permission denied,please try again.我分 ...

  6. WebView中的页面调试方法

    在 iOS 12 中,苹果正式弃用 UIWebView,改成 WKWebView,参考官方声明. 后者在性能.稳定性.功能方面有很大提升,并且与 Safari 具有相同的 JavaScript 引擎( ...

  7. 文心一言 VS 讯飞星火 VS chatgpt (166)-- 算法导论13.1 6题

    六.用go语言,在一棵黑高为 k 的红黑树中,内部结点最多可能有多少个?最少可能有多少个? 文心一言: 红黑树是一种自平衡的二叉查找树,其中每个节点都有一个颜色属性,可以是红色或黑色.红黑树满足以下性 ...

  8. 在Linux服务器上装jenkins(方式一:war包)

    官网下载jenkins https://www.jenkins.io/zh/download/ 官网下载太慢,可以去清华镜像下载(百度搜索:清华镜像) 下载的文件是jenkins.war 把安装文件放 ...

  9. mybatis测试类的书写步骤

    mybatis测试类的书写步骤 private SqlSession session; @Test //* 1.根据UserMapper接口的Class对象获取Mapper接口类型的对象 //* 2. ...

  10. Java 集合(一)List

    在 Java 中,主要存在以下三种类型的集合:Set.List 和 Map,按照更加粗略的划分,可以分为:Collection 和 Map,这些类型的继承关系如下图所示: Collection 是集合 ...