springboot+nginx+ftp實現文件(單文件或者多文件上傳)

https://www.cnblogs.com/jacklovejia/p/7715977.html linux+nginx+ftp搭建文件服務器

單文件上傳

1.加載jar包


<!-- 文件上傳 -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>
<!-- ftp需要使用jar包-->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
</dependency>

2.配置application.yml

server:

  port: 5300

  spring:

  mvc:

    view:

      prefix: /WEB-INF/

      suffix: .jsp

  ftp_address: 192.168.1.139

  ftp_port: 21

  ftp_username: admin   

  ftp_password: admin

  ftp_workdirectory: /home/admin

3.編寫jsp

 

<form action="upload" method="post" enctype="multipart/form-data">

    <input type="file" name="file" ><br>

    <input type="submit" value="上傳">

  </form>

4編寫controller

package com.s;

  

  import org.apache.commons.net.ftp.FTP;

  import org.apache.commons.net.ftp.FTPClient;

  import org.apache.commons.net.ftp.FTPReply;

  import org.springframework.beans.factory.annotation.Value;

  import org.springframework.stereotype.Controller;

  import org.springframework.web.bind.annotation.PostMapping;

  import org.springframework.web.bind.annotation.RequestMapping;

  import org.springframework.web.bind.annotation.RequestParam;

  import org.springframework.web.bind.annotation.ResponseBody;

  import org.springframework.web.multipart.MultipartFile;

  import sun.net.ftp.FtpClient;

  

  import java.io.FileInputStream;

  import java.io.IOException;

  import java.io.InputStream;

  

  @Controller

  public class UploadContoller {

    @Value("${ftp_address}")

    private String  ip;

    @Value("${ftp_port}")

    private int port;

    @Value("${ftp_username}")

    private String username;

    @Value("${ftp_password}")

    private String password;

    @Value("${ftp_workdirectory}")

    private String path;

    @RequestMapping("show")

    public String query(){

        return "file";

    }

    @PostMapping("upload")

    @ResponseBody

    public String upload(@RequestParam("file") MultipartFile file){

      String fileName= file.getOriginalFilename();

      System.out.println("文件名:"+fileName);

      String flag="";

      try {

          InputStream inputStream = file.getInputStream();//spring提供的文件流

         flag= connectFTP(ip,port,username,password,path,fileName,inputStream);

      }catch(IOException e){

          e.printStackTrace();

      }

  

        return flag;

  

    }

    public String connectFTP(String ip,Integer port,String username,String password,String path,String filename,InputStream inputStream){

        //連接ftp

        FTPClient  ftpClient= new FTPClient();

        try {

            ftpClient.connect(ip, port);//連接ftp

            ftpClient.login(username, password);//ftp 用戶名和密碼

            //測試連接是否成功  200-300之間   說明連接成功 否則連接失敗

           int code= ftpClient.getReplyCode();

           System.out.println("響應碼是"+code);

           if(!FTPReply.isPositiveCompletion(code)){

              ftpClient.disconnect();

           }

            //設置文件上傳路徑

            ftpClient.changeWorkingDirectory(path);

           //設置上傳二進制文件

            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

            //真正保存的ftp服務器

            boolean flag=ftpClient.storeFile(filename,inputStream);

           if(flag){

  

               return "success" ;

           }

           else{

               return "error";

           }

        }

        catch (Exception e){

            e.printStackTrace();

        }finally {

            try{

            ftpClient.disconnect();}

            catch (Exception e){

                e.printStackTrace();

            }

        }

        return "";

    }

}

 

5.測試

http://localhost:5300/show

多文件上傳(pom和配置文件省略)

1.編寫多文件上傳的jsp頁面

<form action="uploads" method="post" enctype="multipart/form-data">

    <input type="file" name="files" ><br>

    <input type="file" name="files" ><br>

    <input type="file" name="files" ><br>

    <input type="file" name="files" ><br>

    <input type="submit" value="上傳">

  </form>

 

2.編寫controller

package com.s;

  

  import org.apache.commons.net.ftp.FTP;

  import org.apache.commons.net.ftp.FTPClient;

  import org.apache.commons.net.ftp.FTPReply;

  import org.springframework.beans.factory.annotation.Value;

  import org.springframework.stereotype.Controller;

  import org.springframework.web.bind.annotation.PostMapping;

  import org.springframework.web.bind.annotation.RequestMapping;

  import org.springframework.web.bind.annotation.RequestParam;

  import org.springframework.web.bind.annotation.ResponseBody;

  import org.springframework.web.multipart.MultipartFile;

  

  import java.io.IOException;

  import java.io.InputStream;

  

  @Controller

  public class UploadsContoller {

    @Value("${ftp_address}")

    private String  ip;

    @Value("${ftp_port}")

    private int port;

    @Value("${ftp_username}")

    private String username;

    @Value("${ftp_password}")

    private String password;

    @Value("${ftp_workdirectory}")

    private String path;

    @RequestMapping("shows")

    public String query(){

        return "files";

    }

    @PostMapping("uploads")

    @ResponseBody

    public String upload(@RequestParam("files") MultipartFile[] file){

     // String fileName= file.getOriginalFilename();

      System.out.println("文件個數:"+file.length);

      String msg="success";

      for(MultipartFile f:file){

      try {

          String fileName= f.getOriginalFilename();

          System.out.println("文件名"+fileName);

          InputStream inputStream = f.getInputStream();//spring提供的文件流

          String  flag = connectFTP(ip,port,username,password,path,fileName,inputStream);

      }catch(IOException e){

          msg="fail";

          e.printStackTrace();

      }

  

      }

        return msg;

  

    }

    public String connectFTP(String ip,Integer port,String username,String password,String path,String filename,InputStream inputStream){

        //連接ftp

        FTPClient  ftpClient= new FTPClient();

        try {

            ftpClient.connect(ip, port);//連接ftp

            ftpClient.login(username, password);//ftp 用戶名和密碼

            //測試連接是否成功  200-300之間   說明連接成功 否則連接失敗

           int code= ftpClient.getReplyCode();

           System.out.println("響應碼是"+code);

           if(!FTPReply.isPositiveCompletion(code)){

              ftpClient.disconnect();

           }

            //設置文件上傳路徑

            ftpClient.changeWorkingDirectory(path);

           //設置上傳二進制文件

            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

            //真正保存的ftp服務器

            boolean flag=ftpClient.storeFile(filename,inputStream);

           if(flag){

  

               return "success" ;

           }

           else{

               return "error";

           }

        }

        catch (Exception e){

            e.printStackTrace();

        }finally {

            try{

            ftpClient.disconnect();}

            catch (Exception e){

                e.printStackTrace();

            }

        }

        return "";

    }

}

 

3.訪問

http://localhost:5300/shows

發佈了7 篇原創文章 · 獲贊 9 · 訪問量 752
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章