JAVA 文件的上传下载
一、上传文件
1、使用 transferTo 上传
@ResponseBody
@RequestMapping(value = "/file/upload")
public ResultModel upload(@RequestParam MultipartFile file, HttpServletRequest request) {
ResultModel resultModel = new ResultModel();
String fileName = file.getOriginalFilename();
String newFileName = IdUtil.uuid() + "_" + fileName;
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String dateFolder = sdf.format(new Date()); //文件后缀名
String fileNameLower = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."),file.getOriginalFilename().length()).toLowerCase();//toLowerCase();//小写文件名
String staticFileType = ".jpg,.png,.txt,.doc,.zip,.mp4";//允许上传的类型格式
String uploadPath = "/usr/data/upload"; //服务器上传路径 if(staticFileType.indexOf(fileNameLower) != -1){
long len = file.getSize(); //上传文件大小
if(len <= 20971520) {
if (file.isEmpty()) {
return resultModel;
}
//上传文件 服务器路径 + 当前日期 例如:201900808
String fileUploadPath = uploadPath + "/"+dateFolder + "/";
File f = new File(fileUploadPath);
if(!f.exists()){
f.mkdirs();
}
String filePath = fileUploadPath + newFileName;
File targetFile = new File(filePath);
try {
//将上传的文件写到服务器上指定的文件。
file.transferTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
}
//保存文件路径到数据库中
fileAttachService.insert(filePath, fileName);
}else{
resultModel.setStatus(500);
resultModel.setStatuMsg("文件大小不能超过20M!"); //文件大小不能超过20M
return resultModel;
}
}else{
resultModel.setStatus(500);
resultModel.setStatuMsg("文件后缀名不符合规范!"); //文件后缀名不符合规范
return resultModel;
}
return resultModel;
}
2.使用 org.springframework.util.FileCopyUtils.copy()
import org.springframework.util.FileCopyUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; public class UploadFilesController {
@ResponseBody
@RequestMapping(value = "/file/upload")
public ResultModel upload(@RequestParam MultipartFile file, HttpServletRequest request) {
ResultModel resultModel = new ResultModel();
String fileName = file.getOriginalFilename();
String newFileName = IdUtil.uuid() + "_" + fileName;
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String dateFolder = sdf.format(new Date()); //文件后缀名
String fileNameLower = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."),file.getOriginalFilename().length()).toLowerCase();//toLowerCase();//小写文件名
String staticFileType = ".jpg,.png,.txt,.doc,.zip,.mp4";//允许上传的类型格式
String uploadPath = "/usr/data/upload"; //服务器上传路径 if(staticFileType.indexOf(fileNameLower) != -1){
long len = file.getSize(); //上传文件大小
if(len <= 20971520) {
if (file.isEmpty()) {
return resultModel;
}
//上传文件 服务器路径 + 当前日期 例如:201900808
String filePath = uploadPath + "/"+dateFolder + "/" ; File saveFile = new File(filePath,newFileName);
try {
if(!saveFile.exists()){
saveFile.createNewFile();
}
FileCopyUtils.copy(file.getInputStream(), new FileOutputStream(saveFile));
}
catch (IOException e) {
e.printStackTrace();
}
//保存文件路径到数据库中
fileAttachService.insert(filePath, fileName);
}else{
resultModel.setStatus(500);
resultModel.setStatuMsg("文件大小不能超过20M!"); //文件大小不能超过20M
return resultModel;
}
}else{
resultModel.setStatus(500);
resultModel.setStatuMsg("文件后缀名不符合规范!"); //文件后缀名不符合规范
return resultModel;
}
return resultModel;
}
}
二、下载文件
import org.apache.commons.io.IOUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import java.io.*;
public class UploadFilesController { @RequestMapping(value = "/file/download/{fileId}")
public void download(@PathVariable("fileId") String fileId, HttpServletRequest request, HttpServletResponse response) {
FileAttach fileAttach = fileAttachService.selectById(fileId);
File file = new File(fileAttach.getFilePath()); InputStream in = null;
OutputStream os = null;
try {
//String fileName = URLEncoder.encode(fileAttach.getFileName(), "UTF-8").replaceAll("\\+", "%20");
String fileName = new String(fileAttach.getFileName().getBytes("gb2312"), "ISO8859-1");//解决中文名乱码
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;fileName=" + fileName);
response.setHeader("Content-Length", ""file.length());//展示下载进度
in = new FileInputStream(file);
os = response.getOutputStream();
IOUtils.copyLarge(in, os);
}
catch (Exception e) {
e.printStackTrace();
}
finally {
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(os);
}
}
}
JAVA 文件的上传下载的更多相关文章
- java文件夹上传下载控件分享
用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个需要在JAVA.MyEclipse环境下大文件上传的问题,无奈之下自己开发了一套文件上传控件,在这里分享一下.希望能对你有所帮助. 以下 ...
- java文件断点续传上传下载解决方案
这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...
- java文件夹上传下载组件
核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...
- JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)
package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...
- Spring实现文件的上传下载
背景:之前一直做的是数据库的增删改查工作,对于文件的上传下载比较排斥,今天研究了下具体的实现,发现其实是很简单.此处不仅要实现单文件的上传,还要实现多文件的上传. 单文件的下载知道了,多文件的下载呢? ...
- SocketIo+SpringMvc实现文件的上传下载
SocketIo+SpringMvc实现文件的上传下载 socketIo不仅可以用来做聊天工具,也可以实现局域网(当然你如果有外网也可用外网)内实现文件的上传和下载,下面是代码的效果演示: GIT地址 ...
- JAVAWEB之文件的上传下载
文件上传下载 文件上传: 本篇文章使用的文件上传的例子使用的都是原生技术,servelt+jdbc+fileupload插件,这也是笔者的习惯,当接触到某些从未接触过的东西时,总是喜欢用最原始的东西将 ...
- SSM框架之中如何进行文件的上传下载
SSM框架的整合请看我之前的博客:http://www.cnblogs.com/1314wamm/p/6834266.html 现在我们先看如何编写文件的上传下载:你先看你的pom.xml中是否有文件 ...
- 使用Fileupload完成文件的上传下载
目录 使用Fileupload完成文件的上传下载 为什么需要进行文件上传下载? 引入jar包 文件上传 注意事项 编写一个简单的文件上传jsp页面 编写Servlet Student类用于封装数据,后 ...
随机推荐
- 笔记57 Mybatis和Hibernate的比较
一.Hibernate和MyBatis简介 1.Hibernate简介 Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映 ...
- *** stack smashing detected ***: ./server terminated
该类错误是修改了返回指针,一般是由于 1. 数组越界赋值.(数组没有边界检查)int a[8]; a[8],a[9],a[-1]..都能正常编译,连接,运行时可能出错. 2.使用 strcpy等不安全 ...
- MySQL主从复制&读写分离&分库分表
MySQL主从复制 MySQL的主从复制只能保证主机对外提供服务,从机是不提供服务的,只是在后台为主机进行备份数据 首先我们说说主从复制的原理,这个是必须要理解的玩意儿: 理解: MySQL之间的数据 ...
- Java中的线程Thread方法之---interrupt()
前几篇都介绍了Thread中的几个方法,相信大家都发现一个相似点,那就是sleep,join,wait这样的阻塞方法都必须捕获一个InterruptedException异常,顾名思义就是一个线程中断 ...
- 字符串dp——牛客多校第五场G
比赛的时候脑瘫了没想出来..打多校以来最自闭的一场 显然从s中选择大于m个数组成的数必然比t大,所以只要dp求出从s中选择m个数大于t的方案数 官方题解是反着往前推,想了下反着推的确简单,因为高位的数 ...
- 语音识别(Web Speech API)
近期看了一个语音识别的dome-----Web Speech API 本api为js调用云端接口识别 个人测试了一下,响应速度还是比较快的 注意:本API与官网需翻墙使用和访问 展示效果: 页面代码如 ...
- NX二次开发-UFUN创建表达式UF_MODL_create_exp_tag有TAG
NX9+VS2012 #include <uf.h> #include <uf_modl.h> UF_initialize(); //创建一个新的表达式,无TAG UF_MOD ...
- 剑指offer——29顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...
- 剑指offer——23调整数组顺序使奇数位于偶数前面
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 题解: 一种是数 ...
- 802.11ac wave2的前世今生
2015年下半年,高通.博通.RTL等芯片厂商相继发布了满足802.11ac wave2要求的芯片,WLAN及终端厂商也迅速跟进推出相应的产品和终端.802.11ac wave2在多方推动下于2015 ...