@Path("addContract.do")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.TEXT_HTML)publicString addContract(@Context HttpServletRequest request, @Context HttpServletResponse response){try{//这里根据业务做修改
Contract contract = newContract();//重点是调用saveFile方法
UploadResult uploadResult =saveFile(request);
contract.setShopId(Integer.valueOf(uploadResult.getParamMap().get("shopId")));
contract.setContractUrl(uploadResult.getFilePath());
Boolean success=contractService.addContract(contract);return JSON.toJSONString(RespApi.buildResp(200, "success", success));
}catch(ContractExeption contractExeption) {
log.warn(ExceptionUtils.getStackTrace(contractExeption));return JSON.toJSONString(RespApi.buildResp(400, "fail to add contract", false));
}
}publicUploadResult saveFile(HttpServletRequest request) {
Map resultMap = new HashMap<>();
String fileName= "";try{if(ServletFileUpload.isMultipartContent(request)) {
FileItemFactory factory= newDiskFileItemFactory();//如果没以下两行设置的话,上传大的 文件 会占用 很多内存,//设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同
/*** 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上,
* 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem 格式的
* 然后再将其真正写到 对应目录的硬盘上*/
//这个tempDir需要自己设置
File tempF = newFile(tempDir);if (!tempF.exists()) {
tempF.mkdirs();
}
factory.setRepository(tempF);//设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室
factory.setSizeThreshold(1024 * 1024);//高水平的API文件上传处理
ServletFileUpload upload = newServletFileUpload(factory);
List items = null;try{
items=upload.parseRequest(request);
}catch(FileUploadException e) {
e.printStackTrace();
}if (items != null) {
Iterator iter =items.iterator();while(iter.hasNext()) {
FileItem item=iter.next();//属性字段
if(item.isFormField()) {//获取表单的属性名字
String name =item.getFieldName();
String value=item.getString();
resultMap.put(name,value);
}//文件
if (!item.isFormField() && item.getSize() > 0) {//可以得到流
InputStream in =item.getInputStream();
fileName=processFileName(item.getName());try{
String basePath=getRootPath();
String types= "pic";
String date=DateUtil.getNowDateStr(DateUtil.TO_DAY);
String realPath= basePath + File.separator + types + File.separator +date+File.separator;//String realPath = basePath + File.separator + types + File.separator + date//+ File.separator;
System.out.println(realPath);
File file1= newFile(realPath);if (!file1.exists()) {
file1.mkdirs();
}
String name= UUID.randomUUID().toString() + ".jpg";
fileName= types + File.separator + date + File.separator +name;
File files= new File(realPath +name);
item.write(files);
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
}
}catch(Exception e) {
}
UploadResult uploadResult= newUploadResult();
uploadResult.setFilePath(fileName);
uploadResult.setParamMap(resultMap);returnuploadResult;
}//返回结果的包装类
public classUploadResult {privateString filePath;private MapparamMap;publicString getFilePath() {returnfilePath;
}public voidsetFilePath(String filePath) {this.filePath =filePath;
}public MapgetParamMap() {returnparamMap;
}public void setParamMap(MapparamMap) {this.paramMap =paramMap;
}
}