Nginx 搭建图片服务器( 三 )

// 2. ftp 服务器的文件名 String newName = oldName; //图片上传 boolean result = uploadFile(FTP_ADDRESS, FTP_PORT, FTP_USERNAME, FTP_PASSWORD, uploadFile.getInputStream, FTP_BASE_PATH, newName); //返回结果 if(!result) { resultMap.put("error", 1); resultMap.put("message", "upload Fail"); return resultMap; } resultMap.put("error", 0); resultMap.put("url", IMAGE_BASE_URL + "/" + newName); return resultMap; } catch (Exception e) { e.printStackTrace; resultMap.put("error", 1); resultMap.put("message", "upload Fail"); return resultMap; } } /** * ftp 上传图片方法 * @param ip ftp 服务器ip地址 * @param port ftp 服务器port,默认是21 * @param account ftp 服务器用户名 * @param passwd ftp 服务器密码 * @param inputStream 文件流 * @param workingDir ftp 服务器存储图片的绝对路径 * @param fileName 上传到ftp 服务器文件名 * @throws Exception * */ public boolean uploadFile(String ip, Integer port, String account, String passwd, InputStream inputStream, String workingDir, String fileName) throws Exception{ boolean result = false; // 1. 创建一个FtpClient对象 FTPClient ftpClient = new FTPClient; try { // 2. 创建 ftp 连接 ftpClient.connect(ip, port); // 3. 登录 ftp 服务器 ftpClient.login(account, passwd); int reply = ftpClient.getReplyCode; // 获取连接ftp 状态返回值 System.out.println("code : " + reply); if (!FTPReply.isPositiveCompletion(reply)) { ftpClient.disconnect; // 如果返回状态不再 200 ~ 300 则认为连接失败 return result; } // 4. 读取本地文件// FileInputStream inputStream = new FileInputStream(new File("F:\hello.png")); // 5. 设置上传的路径 ftpClient.changeWorkingDirectory(workingDir); // 6. 修改上传文件的格式为二进制 ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // 7. 服务器存储文件,第一个参数是存储在服务器的文件名,第二个参数是文件流 if (!ftpClient.storeFile(fileName, inputStream)) { return result; } // 8. 关闭连接 inputStream.close; ftpClient.logout; result = true; } catch (Exception e) { e.printStackTrace; }finally { // FIXME 听说,项目里面最好少用try catch 捕获异常,这样会导致Spring的事务回滚出问题???难道之前写的代码都是假代码!!! if (ftpClient.isConnected) { try { ftpClient.disconnect; } catch (IOException ioe) { } } } return result; }}说明:

  • @Value 注解是Spring4 中提供的,@Value("${XXX}")
  • 返回值是一个Map,并且key有error,url,message 。这是根据KindEditer的语法要求来的 。详情见链接 。http://kindeditor.net/docs/upload.html
 
Controller 层负责页面跳转的 PageController.java
@Controllerpublic class PageController { /** * 打开首页 */ @RequestMapping("/") public String showIndex { return "index"; } @RequestMapping("/{page}") public String showpage(@PathVariable String page) { System.out.println("page : " + page); return page; }}负责图片上传的 PictureController.java
@RestControllerpublic class PictureController { @Autowired private PictureService pictureService; @RequestMapping("pic/upload") public String pictureUpload(@RequestParam(value = https://www.isolves.com/it/wlyx/fwq/2019-08-20/"fileUpload") MultipartFile uploadFile) { String json = ""; try { Map result = pictureService.uploadPicture(uploadFile); // 浏览器擅长处理json格式的字符串,为了减少因为浏览器内核不同导致的bug,建议用json json = new ObjectMapper.writeValueAsString(result); } catch (JsonProcessingException e) {


推荐阅读