upload load

1.后台部分
import com.alibaba.fastjson.JSONObject;
import com.sekorm.flow.webentity.ResponseBean;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@Component
public class FileUtils {

private static Logger log = Logger.getLogger(FileUtils.class);

private static String uploadPath;

@Value("${upload_path}")
public void setUploadPath(String uploadPath) {
FileUtils.uploadPath = uploadPath;
}
public String getUploadPath() {
return uploadPath;
}

public static JSONObject upload(HttpServletRequest request , HttpServletResponse response){
JSONObject responseBean = new JSONObject();
responseBean.put("code", -1);
try {
//创建一个通用的多部分解析器
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//判断 request 是否有文件上传,即多部分请求(即检查form中是否有enctype="multipart/form-data")
if(multipartResolver.isMultipart(request)){
//转换成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
//取得request中的所有input的name
Iterator<String> iter = multiRequest.getFileNames();
while(iter.hasNext()){
//取得一个input里面所有的上传文件
List<MultipartFile> list = multiRequest.getFiles(iter.next());
for(MultipartFile file : list){
if(file != null){
//取得当前上传文件的文件名称
String myFileName = file.getOriginalFilename();
//如果名称不为“”,说明该文件存在,否则说明该文件不存在
if(!StringUtils.isBlank(myFileName) && myFileName.trim() != null){
//重命名上传后的文件名
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMddHHmmss");
String saveName = myFileName.substring(0,myFileName.lastIndexOf("."))+"_"+sdf.format(date).toString() + myFileName.substring(myFileName.lastIndexOf("."));
//定义上传路径
File localFile = new File(uploadPath,saveName);
File pathIsExit = new File(uploadPath);
if(!pathIsExit.exists() && !pathIsExit .isDirectory()){
pathIsExit.mkdirs();
}
if(!localFile.exists()){
localFile.createNewFile();
}
//保存
file.transferTo(localFile);
responseBean.put("data",saveName);
}
}
}
}
}
responseBean.put("code",0);
}catch (Exception e){
log.error("上传文件报错->%",e);
responseBean.put("msg","上传文件报错");
}
return responseBean;
}

public static void load(HttpServletRequest request , HttpServletResponse response){
try{
//获取网站部署路径(通过ServletContext对象),用于确定下载文件位置,从而实现下载
String path =uploadPath;
String fileName=URLDecoder.decode(request.getParameter("fileName"),"UTF-8");
//1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
response.setContentType("multipart/form-data");
//2.设置文件头:最后一个参数是设置下载文件名(假如我们叫a.pdf)
response.setHeader("Content-Disposition", "attachment;fileName="+java.net.URLEncoder.encode(fileName, "UTF-8"));
ServletOutputStream out;
//通过文件路径获得File对象(假如此路径中有一个download.pdf文件)
File file = new File(path + fileName);
out = response.getOutputStream();
FileInputStream inputStream = new FileInputStream(file);
try {
//3.通过response获取ServletOutputStream对象(out)
int b = 0;
byte[] buffer = new byte[1204];
while ((b =inputStream.read(buffer))!= -1){
//4.写到输出流(out)中
out.write(buffer,0,b);
out.flush();
}
} catch (IOException e) {
log.error("下载文件报错->%",e);

}finally {
out.close();
inputStream.close();
}
}catch (Exception e){
log.error("下载文件报错->%",e);

}
}
}

2.js 部分
 //上传文件事件
$("#myFile").bind("change",function () {
$("#dwform").attr("enctype","multipart/form-data");
$.ajax({
url: $("#PageContext").val()+'/file/upload' ,
type: 'POST',
cache: false,
data: new FormData($('#dwform')[0]),
processData: false,
contentType: false,
dataType:"json",
success : function(data) {
console.log(data.code);
if(data.code==0){
$("#fileName").val(data.data);
$("#loadFile").remove();
}else{
layer.msg(data.msg);
}
}
});
})
});

//下载文件
function load(fileName) {
var $ = layui.jquery;
var url= $("#PageContext").val()+'/file/load?fileName='+encodeURI(encodeURI(fileName)) ;
window.open(url);
}
3.页面部分
 <a onclick="javascript:load('迷你截图_20190110140346.exe')">迷你截图_20190110140346.exe</a>


4. controller 部分
@Controller
@RequestMapping(value = "/file")
public class FileController {

private static Logger log = Logger.getLogger(FileController.class);

@RequestMapping(value = "/upload")
@ResponseBody
public JSONObject upload(@ModelAttribute DW dw, HttpServletRequest request, HttpServletResponse resp) {
JSONObject responseBean = new JSONObject();
responseBean.put("code", -1);
try {
return FileUtils.upload(request,resp);
}catch (Exception e) {
log.error("上传文件失败{}->",e);
responseBean.put("msg","上传文件失败");
}
return responseBean;
}

@RequestMapping(value = "/load")
@ResponseBody
public void load(@ModelAttribute DW dw, HttpServletRequest request, HttpServletResponse resp) {
try {
FileUtils.load(request,resp);
}catch (Exception e) {
log.error("下载文件失败{}->",e);
}
}
}
posted @ 2019-01-10 15:42  albert_think  阅读(377)  评论(0编辑  收藏  举报