文件上传和下载
代码示例:
import com.demo.entity.properties.FileConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.Date;
import java.util.List;
@Component
public class FileUtil {
private static final Logger logger = LoggerFactory.getLogger(FileUtil.class);
@Autowired
FileConfig fileConfig;
@Autowired
private static FileConfig staticFileConfig;
@PostConstruct
public void init(){
staticFileConfig = fileConfig;
}
/**
* 单文件上传
* @param file 上传文件
* @param isDeleteLastDay 是否删除前一天文件
* @throws Exception
*/
public static void upload(MultipartFile file, Boolean isDeleteLastDay){
if(file.isEmpty()){
//上传文件不能为空
}
if (isDeleteLastDay){
// 删除前一天生成的文件
Date date = new Date(System.currentTimeMillis() - 1000*60*60*24);
File folder = new File(staticFileConfig.getUpFilePath());
File[] files = folder.listFiles();
if (files != null){
for (int i = 0; i < files.length; i++){
File delete = files[i];
if (new Date(delete.lastModified()).before(date)){
delete.delete();
}
}
}
}
String fileName = file.getOriginalFilename();
File dest = new File(staticFileConfig.getUpFilePath() + "/" + fileName);
if(!dest.getParentFile().exists()){ //判断文件父目录是否存在
dest.getParentFile().mkdir();
}
try {
file.transferTo(dest); //保存文件
//上传成功
} catch (IllegalStateException e) {
e.printStackTrace();
//上传失败
} catch (IOException e) {
e.printStackTrace();
//上传失败
}
}
/**
* 多文件上传
* @param files 上传文件
* @param isDeleteLastDay 是否删除前一天文件
* @throws Exception
*/
public static void multiUpload(HttpServletRequest request, Boolean isDeleteLastDay){
List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
if (files.isEmpty()){
//上传文件不能为空
}
if (isDeleteLastDay){
// 删除前一天生成的文件
Date date = new Date(System.currentTimeMillis() - 1000*60*60*24);
File folder = new File(staticFileConfig.getUpFilePath());
File[] listFiles = folder.listFiles();
if (files != null){
for (int i = 0; i < listFiles.length; i++){
File delete = listFiles[i];
if (new Date(delete.lastModified()).before(date)){
delete.delete();
}
}
}
}
for (MultipartFile file:files){
String fileName = file.getOriginalFilename();
File dest = new File(staticFileConfig.getUpFilePath() + "/" + fileName);
if(!dest.getParentFile().exists()){ //判断文件父目录是否存在
dest.getParentFile().mkdir();
}
try {
file.transferTo(dest);
}catch (Exception e) {
e.printStackTrace();
//上传失败
}
}
//上传成功
}
/**
* 文件下载
* @param response
* @param fileName 下载文件全名-包括后缀
* @param isDelete 是否下载后删除
* @return
* @throws UnsupportedEncodingException
*/
public static Rsp download(HttpServletResponse response, String fileName, boolean isDelete) throws UnsupportedEncodingException{
File file = new File(staticFileConfig.getDownFilePath() + "/" + fileName);
if(file.exists()){ //判断文件是否存在
// response.setContentType("application/force-download");
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName,"utf8"));
byte[] buffer = new byte[1024];
FileInputStream fis = null; //文件输入流
BufferedInputStream bis = null;
OutputStream os = null; //输出流
try {
os = response.getOutputStream();
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
int i = bis.read(buffer);
while(i != -1){
os.write(buffer);
i = bis.read(buffer);
}
} catch (Exception e) {
e.printStackTrace();
//下载失败
}
try {
bis.close();
fis.close();
if (isDelete){
// 删除文件
file.delete();
}
} catch (IOException e) {
e.printStackTrace();
//下载失败
}
}else {
//下载文件不存在
}
//下载成功
}
}
以下代码如有疑问,请参考在静态方法中调用Spring注入的类的方法
@Autowired
FileConfig fileConfig;
@Autowired
private static FileConfig staticFileConfig;
@PostConstruct
public void init(){
staticFileConfig = fileConfig;
}

浙公网安备 33010602011771号