vsftpd + nginx 實現圖片上傳到服務器
- 設置圖片存放路徑
- vim /usr/local/nginx/conf/nginx.conf(添加下面代碼)
location /images/ { root /home/ftpuser/www/; autoindex on; } # root 是將images映射到/home/ftpuser/www/ # autoindex on 是打開瀏覽功能
- vim /usr/local/nginx/conf/nginx.conf(添加下面代碼)
- 重啓nginx,加載配置文件
- vim /usr/local/nginx/sbin
- ./nginx -s reload
- 修改用戶訪問權限
- chown ftpuser /home/ftpuser
- chmod 777 -R /home/ftpuser
- 瀏覽器訪問
- 域名或IP地址 / images / xxx.jpg
- java實現ftp上傳文件測試
public class TestFTP { @Test public void testFtpClient() throws Exception{ // 創建一個 FtpClient 對象 FTPClient ftpClient = new FTPClient(); // 創建 ftp連接 // xxxx : IP地址 ftpClient.connect("xxxx", 21); // 登錄 ftp 服務器,使用用戶名和密碼 ftpClient.login("ftpuser", "123456"); // 上傳文件 // 讀取本地文件 FileInputStream inputStream = new FileInputStream(new File("E:\\imageShow\\local.jpg")); // 設置上傳路徑 // 服務器路徑 ftpClient.changeWorkingDirectory("/home/ftpuser/www/images"); // 修改上傳文件的格式(FTP:文本格式 圖片:二進制格式) ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // 第一個參數:上傳到服務器端的文件名 // 第二個參數:上傳文件的 inputStream ftpClient.storeFile("server.jpg", inputStream); // 關閉連接 ftpClient.logout(); } }
- 使用配置文件設置FTP和圖片服務器的參數
- 新建一個 resource.properties
# FTP 相關配置 # FTP 相關地址 # 即 IP地址 FTP_ADDRESS=xxx.xxx.xxx.xxx FTP_port=21 FTP_USERNAME=ftpuser FTP_PASSWORD=123456 FTP_BASE_PATH=/home/ftpuser/www/images # 圖片服務器相關配置 # 圖片服務器基礎 url IMAGE_BASE_URL=http://xxx.xxx.xxx.xxx/images
- 在spring配置文件中添加掃描
<context:property-placeholder location="classpath:resource/*.properties" />
- 在類中使用
@Value("${FTP_ADDRESS}") private String FTP_ADDRESS; @Value("${FTP_port}") private Integer FTP_port;
- 新建一個 resource.properties
- 上傳圖片
-
service
/** * @Description: 圖片上傳服務 * @Author: 塵 * @Date: 2019/2/2 */ @Service public class PictureServiceImpl implements PictureService{ @Value("${FTP_ADDRESS}") private String FTP_ADDRESS; @Value("${FTP_port}") private Integer FTP_port; @Value("${FTP_USERNAME}") private String FTP_USERNAME; @Value("${FTP_PASSWORD}") private String FTP_PASSWORD; @Value("${FTP_BASE_PATH}") private String FTP_BASE_PATH; @Value("${IMAGE_BASE_URL}") private String IMAGE_BASE_URL; @Override public Map uploadPicture(MultipartFile uploadFile){ Map resultMap = new HashMap(); try { // 生成一個新文件名 // 取原文件名 String oldName = uploadFile.getOriginalFilename(); // 生成新文件名 // UUID.randomUUID String newName = IDUtils.genImageName(); // 截擴展名 newName = newName + oldName.substring(oldName.lastIndexOf(".")); // 圖片上傳 String imagePath = new DateTime().toString("/yyyy/MM/dd"); boolean result = FtpUtil.uploadFile(FTP_ADDRESS, FTP_port,FTP_USERNAME, FTP_PASSWORD, FTP_BASE_PATH, new DateTime().toString("/yyyy/MM/dd"), newName, uploadFile.getInputStream()); // 返回結果 if(!result){ // 失敗 resultMap.put("error", 1); resultMap.put("message", "文件上傳失敗"); return resultMap; } resultMap.put("error", 0); resultMap.put("url", IMAGE_BASE_URL + "/" + imagePath + "/" + newName); return resultMap; } catch (Exception e) { resultMap.put("error", 1); resultMap.put("message", "文件上傳發生異常"); return resultMap; } } }
-
controller
/** * @Description: 圖片上傳 * @Author: 塵 * @Date: 2019/2/2 */ @Controller public class PictureController { @Autowired private PictureService pictureService; @RequestMapping("/pic/upload") @ResponseBody public String pictureUpload(MultipartFile uploadFile){ Map result = pictureService.uploadPicture(uploadFile); // return result; 僅在谷歌瀏覽器有效 // 爲保證功能的兼容性,需要把result轉換成json格式字符串 String json = JsonUtils.objectToJson(result); return json; } }
-
springmvc.xml
<!-- 定義文件上傳解析器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 設定默認編碼 --> <property name="defaultEncoding" value="UTF-8"></property> <!-- 設定文件上傳的最大值5MB,5*1024*1024 --> <property name="maxUploadSize" value="5242880"></property> </bean>
-