2017-07-13 18 views
2

春にローカルディスクに保存してFTPサーバーに画像をアップロードする方法を教えてもらえますか?同じプロジェクトワークスペースとftpサーバーでも使用できます。ローカルディスクに画像を保存せずに、春MultipartFileを使ってFTPサーバーに画像をアップロードする方法

以下は私が試したコードですか?その後、

<dependency> 
    <groupId>commons-net</groupId> 
    <artifactId>commons-net</artifactId> 
    <version>3.6</version> 
</dependency> 

と、このようなFileUploadController#handleFileUpload何か更新:

@RequestMapping(method = RequestMethod.POST, value = "/updateprofile1", consumes = "multipart/form-data") 
public String handleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) { 


    FTPSClient con = getFTPConnection(); 

    try { 

     con.setFileType(FTP.BINARY_FILE_TYPE); 
    // createDirectory(con, "test"); 
     showServerReply(con); 
     System.out.println("Target directory: %s" + con.printWorkingDirectory()); 
     con.setFileType(FTP.BINARY_FILE_TYPE); 
     con.enterLocalPassiveMode(); 


      con.changeWorkingDirectory("user/user_profile"); 
      con.enterLocalPassiveMode(); // important! 
      con.setFileType(FTP.BINARY_FILE_TYPE); 
      String fileName = currrentTime.getTimeInMillis() + "_" + file.getName()+".jpg"; 
      boolean result = con.storeFile(fileName, file.getInputStream()); 
      con.logout(); 
      con.disconnect(); 
      redirectAttributes.addFlashAttribute("message", 
        "You successfully uploaded " + file.getOriginalFilename() + "!"); 

    } catch (Exception e) { 
     redirectAttributes.addFlashAttribute("message", "Could not upload " + file.getOriginalFilename() + "!"); 
    } 

    return "You successfully uploaded " + file.getOriginalFilename() + "!"; 
} 
public static FTPSClient getFTPConnection() { 
    FTPSClient ftp = new FTPSClient(); 
    int reply; 
    try { 
     ftp.connect("1***4"); 
     ftp.login("****", "****); 
     reply = ftp.getReplyCode(); 
     if (FTPReply.isPositiveCompletion(reply)) { 
      for (int i = 0; i < ftp.listDirectories().length; i++) { 
       System.out.println(ftp.listDirectories()); 
      } 
      ftp.changeWorkingDirectory("user"); 
      showServerReply(ftp); 
     // LOGGER.info("-------->>> %s", ftp.printWorkingDirectory()); 
      showServerReply(ftp); 
      //LOGGER.info("Connected Success"); 
     } else { 
      //LOGGER.error("Connection Failed"); 
      ftp.disconnect(); 
      ftp = null; 
     } 
    } catch (SocketException ex) { 
     //LOGGER.error("Error while trying to connect to the ImageBak Repository"); 
     ex.printStackTrace(); 
     ftp = null; 
    } catch (IOException ex) { 
     //LOGGER.error("Error while trying to connect to the ImageBak Repository"); 
     ex.printStackTrace(); 
     ftp = null; 
    } 

    return ftp; 

} 
private static void showServerReply(FTPClient ftpClient) { 
    String[] replies = ftpClient.getReplyStrings(); 
    if (replies != null && replies.length > 0) { 
     for (String aReply : replies) { 
      System.out.println("SERVER: " + aReply); 
     } 
    } 
} 
+0

をあなたはこれまでに何をしようとしたのですか?あなたのコードを教えてください。私が試したコードの下に –

+0

? –

+0

この質問の回答として追加する代わりに、**質問**を編集してコードを追加してください。読むのがはるかに簡単です。質問のすぐ下にshare/[edit](https://stackoverflow.com/posts/45077931/edit)/フラグのリンクがあります。 –

答えて

2

てみ使用thisたとえば、プロジェクトにはApache Commonsのネットを追加

@PostMapping("/") 
public String handleFileUpload(@RequestParam("file") MultipartFile file, 
           RedirectAttributes redirectAttributes) { 
    String FTP_ADDRESS = "your_address"; 
    String LOGIN = "you_login"; 
    String PSW = "you_password"; 

    FTPClient con = null; 

    try { 
     con = new FTPClient(); 
     con.connect(FTP_ADDRESS); 

     if (con.login(LOGIN, PSW)) { 
      con.enterLocalPassiveMode(); // important! 
      con.setFileType(FTP.BINARY_FILE_TYPE); 

      boolean result = con.storeFile(file.getOriginalFilename(), file.getInputStream()); 
      con.logout(); 
      con.disconnect(); 
      redirectAttributes.addFlashAttribute("message", 
        "You successfully uploaded " + file.getOriginalFilename() + "!"); 
     } 
    } catch (Exception e) { 
     redirectAttributes.addFlashAttribute("message", 
       "Could not upload " + file.getOriginalFilename() + "!"); 
    } 

    return "redirect:/"; 
} 
+0

その作業ですが、画像をアップロードしましたが、ファイル形式で保存しました –

+0

上記のコードを見てみましたが、ファイル形式で保存しています –

+0

私の回答を編集しました - 'file.getName()'を 'file.getOriginalFilename ) 'を' con.storeFile'に追加します。そして、それがあなたを助けたならば、答えをaccepr/upvoteすることを忘れないでください。 – Cepr0

関連する問題