Ftp服务器上传/删除图片文件示例

首先添加pom.xml的依赖

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

之后找个ftp上传工具类

package com.cn.sola.utils;
 
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.springframework.stereotype.Component;
 
import java.io.IOException;
import java.io.InputStream;
 
/**
 * FtpUtil工具类 ftp文件上传类
 *
 */
@Component
public class FtpUtil {
 
    //ftp服务器ip地址
    private static final String FTP_ADDRESS = "192.168.226.137";
    //端口号
    private static final int FTP_PORT = 21;
    //用户名
    private static final String FTP_USERNAME = "ftpimage";
    //密码
    private static final String FTP_PASSWORD = "Sola1224";
    //图片路径
    public final String FTP_BASEPATH = "C:\\solaphototest";
 
    public boolean uploadFile(String originFileName, InputStream input) {
        boolean success = false;
        FTPClient ftp = new FTPClient();
        ftp.setControlEncoding("GBK");
        try {
            int reply;
            ftp.connect(FTP_ADDRESS, FTP_PORT);// 连接FTP服务器
            ftp.login(FTP_USERNAME, FTP_PASSWORD);// 登录
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {//判断ftp连接是否可用,源码中判断200>=reply<=300为可用,用户名密码错误为503
                ftp.disconnect();
                return success;
            }
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftp.makeDirectory(FTP_BASEPATH);
            ftp.changeWorkingDirectory(FTP_BASEPATH);
            success = ftp.storeFile(originFileName, input);
            input.close();
            ftp.logout();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return success;
    }
}

这个基本拿来用就可以

之后写一个测试类小测试一下

package com.cn.sola;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.cn.sola.utils.FtpUtil;

@RunWith(SpringRunner.class)
@SpringBootTest
public class FtpTestApplicationTests {

	@Test
	public void contextLoads() {
	  try {
		FileInputStream fs = new FileInputStream("E:\\ftptest\\itest.jpeg");
		
		new FtpUtil().uploadFile("httest.jpeg", fs);
		
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

}

上传就这么简单的完成啦

但是删除会有一些小坑,删除很简单 只要在稍微修改一下工具类就可以,但是我开始却失败了,我以为是代码的问题

结果最后忘了一件事情,那就是ftpimage默认只有读写权限没有删除权限,所要给与他删除权限才可以删除文件

首先右键ftp服务器

点击编辑权限


选中安全标签栏


点击编辑


点击添加


点击高级然后点立即查找


选中你想修改权限的用户例如ftpimage,选中会如下图


点击下图的权限列表就可以设置角色权限了


权限设置完成

下面就可以删除了 下面是删除代码

package com.cn.sola.utils;
 
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.springframework.stereotype.Component;
 
import java.io.IOException;
import java.io.InputStream;
 
/**
 * FtpUtil工具类 ftp文件上传类
 *
 */
@Component
public class FtpUtil {
 
    //ftp服务器ip地址
    private static final String FTP_ADDRESS = "192.168.226.137";
    //端口号
    private static final int FTP_PORT = 21;
    //用户名
    private static final String FTP_USERNAME = "ftpimage";
    //密码
    private static final String FTP_PASSWORD = "Sola1224";
    //图片路径
    public final String FTP_BASEPATH = "C:\\solaphototest";
 
    public boolean uploadFile(String originFileName, InputStream input) {
        boolean success = false;
        FTPClient ftp = new FTPClient();
        ftp.setControlEncoding("GBK");
        try {
            int reply;
            ftp.connect(FTP_ADDRESS, FTP_PORT);// 连接FTP服务器
            ftp.login(FTP_USERNAME, FTP_PASSWORD);// 登录
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return success;
            }
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftp.makeDirectory(FTP_BASEPATH);
            ftp.changeWorkingDirectory(FTP_BASEPATH);
            success = ftp.storeFile(originFileName, input);
            input.close();
            ftp.logout();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return success;
    }
    public boolean deleteFile(String FileName) {
        boolean success = false;
        FTPClient ftp = new FTPClient();
        ftp.setControlEncoding("GBK");
        try {
            int reply;
            ftp.connect(FTP_ADDRESS, FTP_PORT);// 连接FTP服务器
            ftp.login(FTP_USERNAME, FTP_PASSWORD);// 登录
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return success;
            }
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftp.makeDirectory(FTP_BASEPATH);
            ftp.changeWorkingDirectory(FTP_BASEPATH);
            success = ftp.deleteFile(FileName);
            ftp.logout();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return success;
    }

}

聪明的同学已经看出来我把新增和删除都写到了一个工具类,设置全一样 就是ftp调用的方法不一样

ftp已经封装好了方法

那么下面是一个小测试类

package com.cn.sola;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.cn.sola.utils.FtpUtil;

@RunWith(SpringRunner.class)
@SpringBootTest
public class FtpTestApplicationTests {
 
	@Autowired
	private FtpUtil ftputil;
	
	@Test
	public void contextLoads() {

		boolean deleteFile = ftputil.deleteFile("httest.jpeg");
		
		System.out.println(deleteFile);
		}
}
去测试删除没删除成功吧~~~~~~~~~


下面是一个springboot上传到ftp的小实例

controller

	@PostMapping("addphoto")
	@ApiOperation("新增占地施工图例")
	public String addPhoto(MultipartFile image){
		return roadworkservice.addPhoto(image);
	}

service

public String addPhoto(MultipartFile image) {
		// TODO Auto-generated method stub
		try{
			String file = UUID.randomUUID().toString();
			//获取文件全名
			String originalFilename = image.getOriginalFilename();
			//获取传入文件后缀名
			String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
			
			InputStream inputStream = image.getInputStream();
			
			String uuidfilename=file+"."+suffix;
			//上传
			boolean uploadFile = new FtpUtil().uploadFile(uuidfilename, inputStream);
			
			if(uploadFile){
				
				String url="http://192.168.66.63:18080/sola/"+uuidfilename;
				
				return url;
				
			}
		}catch (Exception e) {
			log.error("addPhoto————添加占路施工图例异常: ");
			log.error(e.getMessage());
		}
		return null;
	}

就四则样子杆单。

Springboot上传默认图片大小的1MB

所以想要传入更大的文件得对application.properties做出设置

spring.http.multipart.max-file-size=100mb
spring.http.multipart.max-request-size=500mb
第一个是设置单个文件的最大大小,第二个是总的大小


猜你喜欢

转载自blog.csdn.net/jiulanhao/article/details/80899035