restapi接口开发:接收上传文件(即下载文件)并上传至ftp服务器

之前接口开发一直是用的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("<p>BC-PaaS镜像制品</p>");
	        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<String, Object> uploadResPakgFile(
			@RequestParam String remotePath, @RequestParam("id") String resId,
			@RequestParam("resPakgFileName") MultipartFile multipartFile) {
		Map<String, Object> response = new HashMap<String, Object>();
		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<String, Object> 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;
	}

猜你喜欢

转载自blog.csdn.net/weixin_44465068/article/details/89280493