1. 在實際的應用重,通常是通過程序來進行文件的上傳。
2. 實現java上傳文件到ftp服務器中
- 新建maven項目
- 添加依賴
<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.3</version> </dependency>
- 測試:
@Test public void testFtp1(){ //創建客戶端對象 FTPClient ftp = new FTPClient(); InputStream local=null; try { //連接ftp服務器 ftp.connect("192.168.80.161", 21); //登錄 ftp.login("ftpuser", "1111"); //設置上傳路徑 String path="/home/ftpuser/image"; //檢查上傳路徑是否存在 如果不存在返回false boolean flag = ftp.changeWorkingDirectory(path); if(!flag){ //創建上傳的路徑 該方法只能創建一級目錄,在這里如果/home/ftpuser存在則可創建image ftp.makeDirectory(path); } //指定上傳路徑 ftp.changeWorkingDirectory(path); //指定上傳文件的類型 二進制文件 ftp.setFileType(FTP.BINARY_FILE_TYPE); //讀取本地文件 File file = new File("mm.jpg"); local = new FileInputStream(file); //第一個參數是文件名 ftp.storeFile(file.getName(), local); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { //關閉文件流 local.close(); //退出 ftp.logout(); //斷開連接 ftp.disconnect(); } catch (IOException e) { e.printStackTrace(); } } }
3. 優化java上傳代碼:
如何解決上傳的圖片重名的問題?如果不解決,那么上傳相同名稱的圖片將會覆蓋之前文件。
可以通過重寫設置圖片名稱來,即將圖片名為uuid的名稱。
//生成上傳文件的名稱 public static String getFileName(String primitiveFileName){ //使用uuid生成文件名 String fileName=UUID.randomUUID().toString(); //獲取文件后綴 String suffix=primitiveFileName.substring(primitiveFileName.lastIndexOf(".")); return fileName+suffix; }
2. 當每天上傳的圖片很多時,如何管理這些圖片?
通常會根據年份,月份,日期,來創建目錄來存放數據。
//設置上傳路徑 String basePath="/home/ftpuser/image/"; Date currentDate = new Date(); String dateStr=new SimpleDateFormat("yyyy/MM/dd").format(currentDate); for(String pathStr:dateStr.split("/")){ basePath+=pathStr+"/"; boolean flag = ftp.changeWorkingDirectory(basePath); if(!flag){ //創建上傳的路徑 該方法只能創建一級目錄,在這里如果/home/ftpuser存在則可創建image ftp.makeDirectory(basePath); } } //指定上傳路徑 ftp.changeWorkingDirectory(basePath);