Java中上传文件的工具类

package com.task.util;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;


public class DocumentUtils {
/**
* 将文件上传到指定的磁盘中

* @param request
* @param response
* @throws IllegalStateException
* @throws IOException
*/
public static String upload(HttpServletRequest request, HttpServletResponse response, String path, String type)
throws IllegalStateException, IOException {
// 创建通用的多部分解析器.
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
// 判断 request 是否有文件上传,即多部分请求
if (multipartResolver.isMultipart(request)) {
// 转换成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
// 取得request中的所有文件名
Iterator<String> iter = multiRequest.getFileNames();
while (iter.hasNext()) {
// 取得上传文件
MultipartFile file = multiRequest.getFile(iter.next());
// 判断获取的文件是否存在
if (file != null) {
// 获取文件名
String fileName = file.getOriginalFilename();
// 获取文件类型
String suffix = fileName.indexOf(".") != -1
? fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()) : "";
// 判断文件类型是否为空
if (!StrUtils.isEmpty(suffix)) {
boolean i = whiteList(suffix, type);
// 判断上传的文件类型是否符合要求
if (i) {
path = System.getenv("STAFF_PATH") + path;
// 文件类型符合要求
String url = path + fileName;
// 文件名是否存在
if (new File(url).exists()) {
String prefix = fileName.split("\\.")[0]; // 文件名
Integer serial = 1; // 序号
// 文件名已存在
do {
if (!StrUtils.isEmpty(suffix)) {
url = path + prefix + "(" + serial + ")" + "." + suffix;
} else {
url = path + prefix + "(" + serial + ")";
}
} while (new File(url).exists());
}
// 转存文件
file.transferTo(new File(url));
return url.replace(System.getenv("STAFF_PATH"), "");
} else {
return null;
}
} else {
return null;
}


}


}


}
return null;
}


/**
* 将文件从存储位置下载下来

* @param fileName
* @param request
* @param response
*/
public static void download(String fileName, HttpServletRequest request, HttpServletResponse response) {
// 设置客户端对请求的响应编码为utf-8
response.setCharacterEncoding("utf-8");
// 设置文件ContentType类型,这样设置,会自动判断下载文件类型
response.setContentType("multipart/form-data");
// 设置文件头:最后一个参数是设置下载文件名
response.setHeader("Content-Disposition", "attachment;fileName=" + fileName);
try {
InputStream inputStream = new FileInputStream(new File(fileName));
// 定义一个输出流并
OutputStream os = response.getOutputStream();
// 定义一个字节数组
byte[] b = new byte[2048];
int length;
// 将之前定义的输入流以字节的形式写入的保存的文件中
while ((length = inputStream.read(b)) > 0) {
os.write(b, 0, length);
}
// 关闭输出,输入流
os.close();
inputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}


}


/**
* 根据类型判断,该后缀是否在白名单中。 允许上传的格式为白名单

* @param suffix
* @param type
* @return
*/
private static boolean whiteList(String suffix, String type) {
// 默认为黑名单
boolean i = false;
if (StrUtils.isEmpty(type)) {
// 没有上传类型
i = whiteList(suffix);
} else if (!StrUtils.isEmpty(type)) {
// 有上传类型
if ("image".equals(type)) {
i = imageWhiteList(suffix);
}
}
return i;
}


/**
* 判断文件后缀是否满足条件
*/
private static boolean whiteList(String suffix) {
// 白名单 允许出现的文件后缀
List<String> whiteList = Arrays.asList("JAR");
if (whiteList.contains(suffix.toUpperCase())) {
// 白名单中存在
return true;
}
// 白名单中不存在
return false;
}


/**
* 图片后缀 白名单

* @param suffix
* @return
*/
static boolean imageWhiteList(String suffix) {
List<String> list = Arrays.asList("JPG", "PNG");
if (!StrUtils.isEmpty(suffix) && list.contains(suffix.toUpperCase())) {
return true;
}
return false;
}

}

2.对工具类的应用

// 上传文件
@RequestMapping("uploadFile")
public void uploadFile(Map<String, Object> out, HttpServletResponse response, HttpServletRequest request)
throws IOException, ServletException {
String url = DocumentUtils.upload(request, response, PATH, null);
if (StrUtils.isEmpty(url)) {
response.getWriter().write("格式不正确!");
} else {
// 返回图片的URL地址
response.getWriter().write(url);
}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值