This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
k18-ntcs-web-argus-service/src/main/java/com/nis/web/controller/restful/ConfigFileController.java
zhangdongxu 13acafd43d 上传代码
2017-12-19 14:55:52 +08:00

183 lines
8.2 KiB
Java

package com.nis.web.controller.restful;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.nis.domain.restful.ConfigFile;
import com.nis.restful.RestServiceException;
import com.nis.util.Constants;
import com.nis.util.MD5Utils;
import com.nis.util.StringUtil;
import com.nis.web.controller.BaseRestController;
import com.nis.web.service.SaveRequestLogThread;
import com.nis.web.service.ServicesRequestLogService;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
import com.wordnik.swagger.annotations.ApiParam;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
* @ClassName: ConfigFileController
* @Description: 配置文件上传
* @author (DDM)
* @date 2016年9月19日 下午6:09:33
* @version V1.0
*/
@RestController
@RequestMapping("${servicePath}/file/v1")
@Api(value = "ConfigFileController", description = "配置文件上传")
public class ConfigFileController extends BaseRestController {
Logger logger = LoggerFactory.getLogger(ConfigSourcesController.class);
SimpleDateFormat ymdhms=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Autowired
ServicesRequestLogService servicesRequestLogService;
@RequestMapping(value = "/fileUploadSources", method = RequestMethod.POST)
@ApiOperation(value = "文件上传", httpMethod = "POST", response = Map.class, notes = "多文件上传")
@ApiParam(value = "文件上传", name = "filesUpload", required = true)
public Map fileUploadSources(ConfigFile configFile,HttpServletRequest request,
HttpServletResponse response){
long start=System.currentTimeMillis();
System.out.println("operator:"+configFile.getOperator()+
"version:"+configFile.getVersion()+
"opAction:"+configFile.getOpAction()+
"opTime:"+configFile.getOpTime()
);
JSONArray fileArray=new JSONArray();
SaveRequestLogThread thread=super.saveRequestLog(servicesRequestLogService,Constants.OPACTION_DELETE,request, configFile,fileArray);
String serviceDir=request.getRealPath("upload");
try {
MultipartFile[] files=configFile.getFiles();
if(files != null && files.length > 0){
for (MultipartFile file : files) {
//记录上传过程起始时的时间,用来计算上传时间
int pre = (int) System.currentTimeMillis();
//取得上传文件
if(file != null){
//取得当前上传文件的文件名称
String myFileName = file.getOriginalFilename();
if(!"".equals(myFileName.trim())){
JSONObject fileObject=new JSONObject();
myFileName=myFileName.trim();
//定义上传路径
File serviceFile = new File(serviceDir,myFileName);
//上传的文件已经存在,如果需要另存,请取消注释
// if(serviceFile.exists()){
// myFileName=myFileName.substring(0, myFileName.lastIndexOf(".")-1)+"_new"+
// myFileName.substring(myFileName.lastIndexOf("."), myFileName.length());
// serviceFile=new File(serviceDir,myFileName);
// }
file.transferTo(serviceFile);
fileObject.put("fileName", myFileName);
fileObject.put("fileNameMd5", MD5Utils.getMD5Checksum(serviceDir+"/"+myFileName));
fileObject.put("uploadTime", ymdhms.format(new Date()));
fileArray.add(fileObject);
}
}
//记录上传该文件后的时间
int finaltime = (int) System.currentTimeMillis();
System.out.println(finaltime - pre);
}
}
// thread.setContent(fileArray);
} catch (Exception e) {
thread.setExceptionInfo(e.getMessage()+" "+e.getCause());
logger.error(e.toString());
throw new RestServiceException(thread,System.currentTimeMillis()-start,"文件上传失败");
}
return serviceResponse(thread,System.currentTimeMillis()-start,request, response, "文件上传成功",fileArray);
}
@RequestMapping(value = "/fileDownLoadSources", method = RequestMethod.GET)
@ApiOperation(value = "文件下载", httpMethod = "GET", response = Map.class, notes = "文件下载")
@ApiParam(value = "文件下载", name = "fileDownLoad", required = true)
public Map fileDownLoadSources(String fileName,
HttpServletRequest request,
HttpServletResponse response){
long start=System.currentTimeMillis();
JSONObject fileObject=new JSONObject();
SaveRequestLogThread thread=super.saveRequestLog(servicesRequestLogService,Constants.OPACTION_DELETE,request, fileObject);
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
String downLoadPath=null;
if(!StringUtil.isBlank(fileName)){
}else{
throw new RestServiceException(thread,System.currentTimeMillis()-start,"文件名称为空");
}
try {
fileName=fileName.trim();
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("UTF-8");
String ctxPath = request.getRealPath("upload");
downLoadPath = ctxPath +"/"+ fileName;
long fileLength = new File(downLoadPath).length();
response.setContentType("application/x-msdownload;");
response.setHeader("Content-disposition", "attachment; filename="
+ new String(fileName.getBytes("utf-8"), "ISO8859-1"));
response.setHeader("Content-Length", String.valueOf(fileLength));
bis = new BufferedInputStream(new FileInputStream(downLoadPath));
bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
} catch (Exception e) {
thread.setExceptionInfo(e.getMessage()+" "+e.getCause());
logger.error(e.toString());
throw new RestServiceException(thread,System.currentTimeMillis()-start,"文件下载失败");
} finally {
try {
if (bis != null)
bis.close();
if (bos != null)
bos.close();
} catch (Exception e2) {
thread.setExceptionInfo(e2.getMessage()+" "+e2.getCause());
logger.error(e2.toString());
throw new RestServiceException(thread,System.currentTimeMillis()-start,"文件下载失败");
}
}
try {
fileObject.put("fileName", downLoadPath);
fileObject.put("fileNameMd5", MD5Utils.getMD5Checksum(downLoadPath));
fileObject.put("downloadTime", ymdhms.format(new Date()));
} catch (NoSuchAlgorithmException e) {
thread.setExceptionInfo(e.getMessage()+" "+e.getCause());
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
thread.setExceptionInfo(e.getMessage()+" "+e.getCause());
// TODO Auto-generated catch block
e.printStackTrace();
}
return serviceResponse(thread,System.currentTimeMillis()-start,request, response, "文件下载",fileName);
}
}