之前接口开发一直是用的webservice方式,这次要采用restapi方式,特此记录下:
1.spring配置
2.在拦截器中配置白名单(作用:免登录调用后台服务)
3.接收上传文件(下载文件)后台开发
@RequestMapping(value="/apis/v1/cname/{cname}/name/{name}/version/{version}/file/{file}", method = RequestMethod.POST)
public String testPost(@PathVariable(value = "file")MultipartFile file,@PathVariable(value = "name") String name,
@PathVariable(value = "version") String version,@PathVariable(value = "cname") String cname) {
logger.info("name is " + name);
logger.info("cname is " + cname);
logger.info("version is " + version);
logger.info("fileName is " + file.getOriginalFilename());
if("".equals(name)|name==null){
return "Name cannot be null";
}
if("".equals(version)|version==null){
return "Version cannot be null";
}
if("".equals(file)|file==null){
return "File cannot be null";
}
CmRes cmRes = new CmRes();
String resId = IdGen.uuid();
String userId = "wangy";
Date now = new Date();
cmResController.uploadResPakgFile("resPakgFile", resId, file);
logger.info("文件上传完成 ");
// 中间表插入数据
CmResMiddle cmResMiddle = new CmResMiddle();
cmRes.setId(resId);
cmResMiddle.setId(IdGen.uuid());
cmResMiddle.setMiddleId(IdGen.uuid());
cmResMiddle.setResId(resId);
cmResMiddle.setCreatedBy(userId);
cmResMiddle.setCreatedTimestamp(now);
cmResMiddleService.insertResMiddle(cmResMiddle);
logger.info("中间表插入完成");
cmRes.setDelFlag("0");
cmRes.setName(cname);
cmRes.setEname(name);
cmRes.setSoftnum(name+resId.substring(0, 3));
cmRes.setSoftversion(version);
cmRes.setTypesId("1e86891492bc4f668fa0fd442e18d51a");
cmRes.setClassesFirstId("04069cc295184ce899fe7f0d799ee2f9");
cmRes.setClassesSecondId("32776aa1f90e47ff98e0d1cf29599a32");
cmRes.setHot(0);
cmRes.setByCount(0);
cmRes.setBillingMode("1");
BigDecimal bg= new BigDecimal("0");
cmRes.setPrice(bg);
cmRes.setDepMode("1");
cmRes.setInstallMode("3");
cmRes.setSecCertify("1");
cmRes.setApplyOs("3");
cmRes.setChargeMode("1");
cmRes.setContent("BC-PaaS镜像制品
");
cmRes.setPicUrl("/resLogoPic/db4b053fe6bf4cddb46d6e84217507a5.jpg");
cmRes.setDownload(0);
cmRes.setPubStatus("0");//下架
cmRes.setCheckStatus("3");//待审批,前端传过来,新增的资源状态为“3未提审”
cmRes.setResStatus("0");//新增
cmRes.setCreatedBy(userId);
cmRes.setCreatedTimestamp(now);
cmRes.setUpdatedBy(userId);
cmRes.setUpdatedTimestamp(now);
cmRes.setFromWs("1");
//插入厂商信息
CmVendorInfo vendorInfo = new CmVendorInfo();
String vendorId = UUID.randomUUID().toString();
cmRes.setVendorId(vendorId);
vendorInfo.setSupName("BC-PaaS");
vendorInfo.setCreateBy("wangy");
vendorInfo.setCreateDate(now);
vendorInfo.setId(vendorId);
cmVendorInfoMapper.insertSelective(vendorInfo);
cmResMapper.insertSelective(cmRes);
//插入标签信息
String labelId="f7f719b1b11d41c7845fc88d6694276a";
CmResLabels cmResLabels = new CmResLabels();
cmResLabels.setId(IdGen.uuid());
cmResLabels.setResId(resId);
cmResLabels.setLabelId(labelId);
cmResLabelsMapper.insertSelective(cmResLabels);
logger.info("Docker文件上传完成 ");
return "success";
}
private final static String[] hex = {
"00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F",
"10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F",
"20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F",
"30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F",
"40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F",
"50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F",
"60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F",
"70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F",
"80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F",
"90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F",
"A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF",
"B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF",
"C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF",
"D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF",
"E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF",
"F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"
};
private final static byte[] val = {
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F
};
public static String escape(String s) {
StringBuffer sbuf = new StringBuffer();
int len = s.length();
for (int i = 0; i < len; i++) {
int ch = s.charAt(i);
if (ch == ' ') { // space : map to '+'
sbuf.append('+');
} else if ('A' <= ch && ch <= 'Z') { // 'A'..'Z' : as it was
sbuf.append((char)ch);
} else if ('a' <= ch && ch <= 'z') { // 'a'..'z' : as it was
sbuf.append((char)ch);
} else if ('0' <= ch && ch <= '9') { // '0'..'9' : as it was
sbuf.append((char)ch);
} else if (ch == '-' || ch == '_' // unreserved : as it was
|| ch == '.' || ch == '!'
|| ch == '~' || ch == '*'
|| ch == '/' || ch == '('
|| ch == ')') {
sbuf.append((char)ch);
} else if (ch <= 0x007F) { // other ASCII : map to %XX
sbuf.append('%');
sbuf.append(hex[ch]);
} else { // unicode : map to %uXXXX
sbuf.append('%');
sbuf.append('u');
sbuf.append(hex[(ch >>> 8)]);
sbuf.append(hex[(0x00FF & ch)]);
}
}
return sbuf.toString();
}
public static String unescape(String s) {
StringBuffer sbuf = new StringBuffer();
int i = 0;
int len = s.length();
while (i < len) {
int ch = s.charAt(i);
if (ch == '+') { // + : map to ' '
sbuf.append(' ');
} else if ('A' <= ch && ch <= 'Z') { // 'A'..'Z' : as it was
sbuf.append((char)ch);
} else if ('a' <= ch && ch <= 'z') { // 'a'..'z' : as it was
sbuf.append((char)ch);
} else if ('0' <= ch && ch <= '9') { // '0'..'9' : as it was
sbuf.append((char)ch);
} else if (ch == '-' || ch == '_' // unreserved : as it was
|| ch == '.' || ch == '!'
|| ch == '~' || ch == '*'
|| ch == '/' || ch == '('
|| ch == ')') {
sbuf.append((char)ch);
} else if (ch == '%') {
int cint = 0;
if ('u' != s.charAt(i+1)) { // %XX : map to ascii(XX)
cint = (cint << 4) | val[s.charAt(i+1)];
cint = (cint << 4) | val[s.charAt(i+2)];
i+=2;
} else { // %uXXXX : map to unicode(XXXX)
cint = (cint << 4) | val[s.charAt(i+2)];
cint = (cint << 4) | val[s.charAt(i+3)];
cint = (cint << 4) | val[s.charAt(i+4)];
cint = (cint << 4) | val[s.charAt(i+5)];
i+=5;
}
sbuf.append((char)cint);
}
i++;
}
return sbuf.toString();
}
/**
* 上传软件包
*
* @param remotePath
* @param resId
* @param multipartFile
* @return
*/
@ResponseBody
@RequestMapping("/uploadResPakgFile")
public Map uploadResPakgFile(
@RequestParam String remotePath, @RequestParam("id") String resId,
@RequestParam("resPakgFileName") MultipartFile multipartFile) {
Map response = new HashMap();
try {
String newFileName = "";
if (!multipartFile.isEmpty()) {
// 原始文件名
// String originalFilename =
// multipartFile.getOriginalFilename();
// String fileFormat_ =
// originalFilename.substring(originalFilename.lastIndexOf(".")
// + 1);
String originalFilename = multipartFile.getOriginalFilename();
String fileFormat_ = "";
if (originalFilename.contains(".")) {
fileFormat_ = originalFilename.substring(originalFilename
.lastIndexOf(".") + 1);
newFileName = IdGen.uuid() + "." + fileFormat_;// 随机字符串加原始后缀
} else {
newFileName = IdGen.uuid();// 随机字符串加原始后缀
}
String resUploadPath = Global.getConfig("ResUploadPath");// F:\neunn_app_store_cmcc\resupload
String localFileDir = resUploadPath + File.separator + remotePath;
String localFilePath = localFileDir + File.separator + newFileName;
checkOrCreateDirPath(new File(localFileDir));
OutputStream outputStream = new FileOutputStream(new File(localFilePath));
boolean success = saveFile(multipartFile.getInputStream(), outputStream);
if (success) {
/*获取病毒扫描结果*/
boolean scanResult = "true".equalsIgnoreCase(Global.getConfig("clamav.skipScan")) ?
true : this.fileVirusScan(localFilePath);
if(scanResult){
String date = DateUtils.getDate();
String dir = "resPakgFile/"+date;
InputStream inputStream = multipartFile.getInputStream();
// 上传到Ftp
Map dataMap = this.doFtpUpload(dir, newFileName, inputStream);
boolean bol = (Boolean) dataMap.get("bol");
if(bol){
//上传成功,将异步地将文件传到
FtpConf conf = confService.getFtpConf();
if("master".equals(conf.getCurrNode())){
//如果当前使用的是master,
if(!"0".equals(conf.getExt2())){
//并且slave可用,则异步上传到slave
FTPServerUtil.copyFtpFileAsyn("masterFtpConfig.properties", "slaveFtpConfig.properties", dir, newFileName);
}
}else{
//如果当前使用的是slave,
if(!"0".equals(conf.getExt1())){
//并且master可用,则异步上传到master
FTPServerUtil.copyFtpFileAsyn("slaveFtpConfig.properties", "masterFtpConfig.properties", dir, newFileName);
}
}
// 上传文件成功,将其存入数据库
CmRespakg cmRespakg = new CmRespakg();
cmRespakg.setId(IdGen.uuid());
cmRespakg.setResId(resId);
cmRespakg.setName(originalFilename);
cmRespakg.setSize(multipartFile.getSize());// B
cmRespakg.setPath(dir + "/" + newFileName);
Date now = new Date();
CmSysUsers user = CmUserUtils.getCmUser();
String userId = user.getUserId();
cmRespakg.setCreatedBy(userId);
cmRespakg.setCreatedTimestamp(now);
cmRespakg.setUpdatedBy(userId);
cmRespakg.setUpdatedTimestamp(now);
// 一个资源对应一个资源包
// int effectRow =
// cmRespakgService.insertSelectiveWithDel(cmRespakg);
int effectRow = cmRespakgService.insertSelective(cmRespakg);
if (effectRow > 0) {
response.put("success", "true");
response.put("fileName", originalFilename);
response.put("cmRespakgId", cmRespakg.getId());
response.put("msg", "上传成功");
} else {
response.put("success", "false");
response.put("msg", "上传成功,数据保存失败");
}
// 删除本地文件
File file = new File(localFilePath);
file.delete();
}else {
response.put("success", "false");
response.put("msg", String.valueOf(dataMap.get("msg")));
}
}else{// 删除病毒文件
File file = new File(localFilePath);
file.delete();
response.put("success", "false");
response.put("msg", "文件含有病毒,已经删除!");
}
} else {
response.put("success", "false");
response.put("msg", "上传失败");
}
}else{
response.put("success", "false");
response.put("msg", "文件为空");
}
} catch (Exception e) {
response.put("success", "false");
response.put("msg", e.getMessage());
}
return response;
}