单文件上传 (使用MultipartFile file参数)
/**
* @Title: fileUpload
* @Description: 单文件上传 重命名随机字符串
* @return String
* @author
* @date
*/
public static String fileUpload(MultipartFile file,HttpServletRequest request,HttpServletResponse response){
//获取图片的原名字
String oldName=file.getOriginalFilename();
//原名称前拼接当前时间戳
String newName=System.currentTimeMillis()+"_"+oldName;
String path= "D:/uploadFile";
//新建 uploadFile 文件夹 不存在就新建
File parentPath=new File(path);
if(!parentPath.exists()){
parentPath.mkdirs();
}
String src="";
try {
file.transferTo(new File(parentPath,newName));
File theFile=new File(parentPath+"/"+newName);
if(theFile.exists()){
//拼接图片的相对路径作为URL
src="/"+newName;
}else{
src="";
}
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return src;
}
多文件上传 (使用MultipartFile[] files 参数)
/**
* @Title: FilesUpload
* @Description: 多文件上传 名字拼接字符串
* @return List<String>
* @author
* @date
*/
public static List<String> filesUpload(MultipartFile[] files,HttpServletRequest request,HttpServletResponse response){
List<String> urlList=new ArrayList<>();
if(files!=null&&files.length>0){
String path= "D:/uploadFile";
//新建 uploadFile 文件夹 不存在就新建
File parentPath=new File(path);
if(!parentPath.exists()){
parentPath.mkdirs();
}
String folderName=System.currentTimeMillis()+"";
File folder=new File(path+"/"+folderName);
//文件夹不存在新建
if(!folder.exists()){
folder.mkdirs();
}
for(int i=0;i<files.length;i++){
MultipartFile file=files[i];
//当前时间戳拼接文件名
String fileName=folderName+file.getOriginalFilename();
try {
file.transferTo(new File(folder,fileName));
File theFile=new File(folder+"/"+fileName);
if(theFile.exists()){
String url=folderName+"/"+fileName;
urlList.add(url);
}
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return urlList;
}else{
return urlList;
}
}
简单删除上传文件
/**
* @Title: deleteFile
* @Description: 删除文件
* @return Map<String,Object>
* @author
* @date
*/
public static Map<String,Object> deleteFile(String path){
Map<String,Object> map=new HashMap<>();
String filePath="D:/uploadFile"+path;
System.out.println(filePath);
File file=new File(filePath);
if(file.exists()){
file.delete();
File file1=new File(filePath);
if(file1.exists()){
map.put("status","error");
map.put("msg","文件删除失败!");
}else{
map.put("status","ok");
map.put("msg","文件已删除!");
}
}else{
map.put("status","error");
map.put("msg","文件不存在!");
}
return map;
}
文件下载 (针对于火狐中文乱码、空格转换)
火狐使用编码 new String(fileName.getBytes(“GB2312”),”ISO-8859-1”);
/**
* @Title: checkFile
* @Description: 检测文件是否存在
* @return Map<String,Object>
* @author
* @date
*/
@RequestMapping(value="checkFile",method={RequestMethod.GET,RequestMethod.POST})
@ResponseBody
public static Map<String,Object> checkFile(@Param("fileName")String fileName){
Map<String,Object> map=new HashMap<>();
String path="D:/uploadFile"+fileName;
File file=new File(path);
//文件不存在
if(!file.exists()){
map.put("status","error");
map.put("msg", "文件不存在!");
}else{
map.put("status","ok");
map.put("url", "fileDownload?fileName="+fileName);
}
return map;
}
/**
* @Title: fileDownload
* @Description: 文件下载
* @return Map<String,Object>
* @author
* @date
*/
@RequestMapping(value="fileDownload",method={RequestMethod.GET,RequestMethod.POST})
public static void fileDownload(String fileName,HttpServletRequest request,HttpServletResponse response) throws UnsupportedEncodingException, FileNotFoundException{
String path="D:/uploadFile"+fileName;
try {
// path是指欲下载的文件的路径。
File file = new File(path);
// 取得文件名。
String filename = file.getName();
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(path));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
String realName=filename.substring(filename.indexOf("_")+2,filename.length());
//判断浏览器是否为火狐
if ("FF".equals(getBrowser(request))) {
// 火狐浏览器 设置编码new String(realName.getBytes("GB2312"), "ISO-8859-1");
realName = new String(realName.getBytes("GB2312"), "ISO-8859-1");
}else{
realName = URLEncoder.encode(realName, "UTF-8");//encode编码UTF-8 解决大多数中文乱码
realName = realName.replace("+", "%20");//encode后替换空格 解决空格问题
}
response.addHeader("Content-Disposition", "attachment;filename="+realName+"");
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
/**
* @Title: getBrowser
* @Description: 判断客户端浏览器
* @return String
* @author
* @date
*/
private static String getBrowser(HttpServletRequest request) {
String UserAgent = request.getHeader("USER-AGENT").toLowerCase();
if (UserAgent != null) {
if (UserAgent.indexOf("msie") != -1)
return "IE";
if (UserAgent.indexOf("firefox") != -1)
return "FF";
if (UserAgent.indexOf("safari") != -1)
return "SF";
}
return null;
}
END.