FTP上传图片服务器Ngnix

1.搭建nginx和Vsftpd

Nginx 安装

http://www.cnblogs.com/itdragon/p/7850985.html

Vsftpd 安装

http://www.cnblogs.com/itdragon/p/7857649.html

2.导入jar包

<!--文件上传-->
      <dependency>
          <groupId>commons-io</groupId>
          <artifactId>commons-io</artifactId>
          <version>2.4</version>
      </dependency>

      <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>1.3.1</version>
      </dependency>
      <!--FTP-->
      <dependency>
      <groupId>commons-net</groupId>
      <artifactId>commons-net</artifactId>
      <version>3.6</version>
    </dependency>

3.FTPUtil

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
/** 
	 * Description: 向FTP服务器上传文件 
	 * @param host FTP服务器hostname 
	 * @param port FTP服务器端口 
	 * @param username FTP登录账号 
	 * @param password FTP登录密码 
	 * @param basePath FTP服务器基础目录
	 * @param filePath FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath
	 * @param filename 上传到FTP服务器上的文件名 
	 * @param input 输入流 
	 * @return 成功返回true,否则返回false 
	 */  
	public static boolean uploadFile(String host, int port, String username, String password, String basePath,
			String filePath, String filename, InputStream input) {
		boolean result = false;
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			ftp.connect(host, port);// 连接FTP服务器
			// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
			ftp.login(username, password);// 登录
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return result;
			}
			//切换到上传目录
			if (!ftp.changeWorkingDirectory(basePath+filePath)) {
				//如果目录不存在创建目录
				String[] dirs = filePath.split("/");
				String tempPath = basePath;
				for (String dir : dirs) {
					if (null == dir || "".equals(dir)) continue;
					tempPath += "/" + dir;
					if (!ftp.changeWorkingDirectory(tempPath)) {
						if (!ftp.makeDirectory(tempPath)) {
							return result;
						} else {
							ftp.changeWorkingDirectory(tempPath);
						}
					}
				}
			}
			//设置上传文件的类型为二进制类型
			ftp.setFileType(FTP.BINARY_FILE_TYPE);
			//上传文件
			if (!ftp.storeFile(filename, input)) {
				return result;
			}
			input.close();
			ftp.logout();
			result = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return result;
	}

FTP相关配置

#FTP相关配置
ftp_ip=192.168.62.135
ftp_username=ftpuser
ftp_password=c08740402150
ftp_port=21
ftp_basepath=/home/ftpuser/www/images

#img路径
img_path=http://192.168.62.135/images/

编写PictureSercvice层

@Service
public class PicSerciceImpl implements PicService {

    @Value("${ftp_ip}")
    private String ftp_ip;
    @Value("${ftp_username}")
    private String ftp_username;
    @Value("${ftp_password}")
    private String ftp_password;
    @Value("${ftp_port}")
    private String ftp_port;
    @Value("${ftp_basepath}")
    private String ftp_basepath;
    @Value("${img_path}")
    private String img_path;


    @Override
    public Map picUpload(MultipartFile fileUpload) {
        Map map = new HashMap();
        try {
            //获取文件扩展名
            String originalFilename = fileUpload.getOriginalFilename();
            String ext = originalFilename.substring(originalFilename.lastIndexOf("."));
            //生成图片名
            String imageName = IDUtils.genImageName();

            DateTime dateTime = new DateTime();
            String path = String.format("yyyy/MM/dd");
            boolean flag = FtpUtil.uploadFile(ftp_ip, Integer.parseInt(ftp_port), ftp_username, ftp_password, ftp_basepath, path, imageName + ext, fileUpload.getInputStream());
            if (!flag) {
               map.put("error",1);
               map.put("message","上传失败");
            }else {
                map.put("error",0);
                map.put("url",img_path+path+"/"+imageName + ext);
            }

        } catch (Exception e) {
                map.put("error",1);
                map.put("message","上传失败");

        }

        return map;
    }

单元测试类

public class Demo {
    @Test
    public void test() throws IOException {
        // 1. 创建一个FtpClient对象
        FTPClient ftpClient = new FTPClient();
        // 2. 创建 ftp 连接
        ftpClient.connect("192.168.62.135", 21);
        // 3. 登录 ftp 服务器
        ftpClient.login("ftpuser", "c08740402150");

        String img="C:\\Users\\pla017\\Desktop\\imgs\\微信图片_20191119125223.png";
        // 4. 读取本地文件
        FileInputStream inputStream = new FileInputStream(new File(img));
        // 5. 设置上传的路径
        ftpClient.changeWorkingDirectory("/home/ftpuser/www/images");
        // 6. 修改上传文件的格式为二进制
        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
        // 7. 服务器存储文件,第一个参数是存储在服务器的文件名,第二个参数是文件流
        ftpClient.storeFile("aaa123.jpg", inputStream);
        // 8. 关闭连接
        ftpClient.logout();

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

study@lin017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值