JAVA工具類:FTP工具類

MAVEN 添加

<!-- ftpclient -->
<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.1</version>
</dependency>

FTP工具類

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;


public class FTPUtil {



    //端口未設定 默認 21 端口
    private FTPClient ftpClient;


    private static String ftpIp = PropertiesUtil.getProperty("ftp.server.ip");
    private static String ftpUsername = PropertiesUtil.getProperty("ftp.username");
    private static String ftpPassword = PropertiesUtil.getProperty("ftp.password");

    private static  final Logger logger = LoggerFactory.getLogger(FTPUtil.class);

    //登錄FTP
    private boolean connectServer(String ip,String user,String pwd){

        boolean isSuccess = false;
        ftpClient = new FTPClient();
        try {
            ftpClient.connect(ip);
            isSuccess = ftpClient.login(user,pwd);
        } catch (IOException e) {
            logger.error("登錄FTP服務器異常",e);
        }
        return isSuccess;
    }


    //批量上傳,對外使用的uploadFile方法
    public static boolean uploadFile(List<File> fileList) throws IOException {
        FTPUtil ftpUtil=new FTPUtil();
        logger.info("開始連接ftp服務器");
        boolean result = ftpUtil.uploadFile("img",fileList);
        logger.info("開始連接ftp服務器,結束上傳,上傳結果:{}",result);
        return result;
    }
   
    //內部使用的uploadFile方法 流程: connectServer連接-->  ftpClient設置 --> storeFile上傳  --> disconnect關閉
    //remotePath:ftp文件夾下的某個文件夾,傳空直接在ftp文件下
    private boolean uploadFile(String remotePath,List<File> fileList) throws IOException {
        boolean uploaded = true;
        FileInputStream fis = null;
        //連接FTP服務器
        if(connectServer(ftpIp,ftpUsername,ftpPassword )){
            try {
                //工作目錄,緩衝區,編碼,二進制文件類型(防止亂碼),被動模式
                ftpClient.changeWorkingDirectory(remotePath);
                ftpClient.setBufferSize(1024);
                ftpClient.setControlEncoding("UTF-8");
                ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
                ftpClient.enterLocalPassiveMode();

                //批量上傳
                for(File fileItem : fileList){
                    fis = new FileInputStream(fileItem);
                    ftpClient.storeFile(fileItem.getName(),fis);
                }

            } catch (IOException e) {
                logger.error("上傳文件異常",e);
                uploaded = false;
                e.printStackTrace();
            } finally {
                fis.close();
                ftpClient.disconnect();
            }
        }
        return uploaded;
    }


}

使用

import com.takefree.service.FileService;
import com.takefree.utility.FTPUtil;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;


@Service
public class FileServiceImpl implements FileService {
  
    public String upload(MultipartFile file, HttpServletRequest httpServletRequest)
    {            

        //準備工作: MultipartFile截取擴展名--> 再分配名字  --> 選擇暫存到項目的文件夾路徑resource/upload --> 創建文件夾
        String fileName=file.getOriginalFilename();
        String fileExName=fileName.substring(fileName.lastIndexOf(".")+1);
        String uploadFileName= UUID.randomUUID().toString()+"."+fileExName;
        String path=httpServletRequest.getSession().getServletContext().getRealPath("upload");
        File fileDir=new File(path);
        if(!fileDir.exists()) {
            fileDir.setWritable(true);
            fileDir.mkdirs();
        }
        File targetFile=new File(path,uploadFileName);
        
        //開始工作
        try {
            //MultipartFile已經移到項目
            file.transferTo(targetFile);
            //上傳FTP服務器上
            FTPUtil.uploadFile(Lists.newArrayList(targetFile));
            //刪除upload下面的文件
            targetFile.delete();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  targetFile.getName();
    }

}

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