FTP上传文件到服务器

依赖:

依赖:
    <dependency>
			<groupId>commons-net</groupId>
			<artifactId>commons-net</artifactId>
			<version>3.6</version>
		</dependency>

后端:

@RequestMapping("fileUpload")
    public ApiRest fileUpload(@RequestBody MultipartFile file) throws Exception {
        File filee = MultipartFileToFile.multipartFileToFile(file);
        String time = System.currentTimeMillis()+"";
        String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);

        //2、删除本地文件
        if (uploadToFtp2(filee,time,suffix)){
            System.out.println("上传至ftp服务器!");
        }else {
            System.out.println("上传至ftp服务器失败!");
        }
        filee.delete();

       return success("http://IP:PORT/exam/img/"+time+"."+suffix);
       
    }

    private boolean uploadToFtp2(File file,String time,String suffix){
        FTPClient ftpClient = new FTPClient();
        try {
            //连接ftp服务器 参数填服务器的ip
            ftpClient.connect("IP",PORT);

            //进行登录 参数分别为账号 密码
            ftpClient.login("xxxx","XXXXXX");

            //改变工作目录(按自己需要是否改变)
            //只能选择local_root下已存在的目录
            String[] imgList = {"jpg","png","gif","jpeg","bmp"};
            String[] videoList = {"mp4","avi"};
            if(Arrays.stream(imgList).anyMatch(body -> suffix.equalsIgnoreCase(body))){
                ftpClient.changeWorkingDirectory("/exam/img/");
            }else if(Arrays.stream(videoList).anyMatch(body -> suffix.equalsIgnoreCase(body))){
                ftpClient.changeWorkingDirectory("/exam/video/");
            }else{
                ftpClient.changeWorkingDirectory("/exam/other/");
            }

            //设置文件类型为二进制文件
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

            //开启被动模式(按自己如何配置的ftp服务器来决定是否开启)
            ftpClient.enterLocalPassiveMode();
            String server_path = time+"."+suffix;
            long c = System.currentTimeMillis();
            InputStream input = new FileInputStream(file);
            OutputStream out = ftpClient.storeFileStream(server_path);
            byte[] byteArray = new byte[4096];
            int read = 0;
            while((read = input.read(byteArray)) != -1){
                out.write(byteArray,0, read);
            }
            out.close();
            input.close();
            file.delete();
            long b = System.currentTimeMillis();
            System.out.println("上传用时: "+(b-c)+"ms");

        } catch (IOException e) {
            e.printStackTrace();
            return false;

        }
        return true;
    }

文件转换工具类

public class MultipartFileToFile {

    /**
     * MultipartFile 转 File
     *
     * @param file
     * @throws Exception
     */
    public static File multipartFileToFile(MultipartFile file) throws Exception {

        File toFile = null;
        if (file.equals("") || file.getSize() <= 0) {
            file = null;
        } else {
            InputStream ins = null;
            ins = file.getInputStream();
            toFile = new File(file.getOriginalFilename());
            inputStreamToFile(ins, toFile);
            ins.close();
        }
        return toFile;
    }

    //获取流文件
    private static void inputStreamToFile(InputStream ins, File file) {
        try {
            OutputStream os = new FileOutputStream(file);
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            ins.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 删除本地临时文件
     * @param file
     */
    public static void delteTempFile(File file) {
        if (file != null) {
            File del = new File(file.toURI());
            del.delete();
        }
    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值