JAVA上传文件到FTP上
添加maven
<!-- https://mvnrepository.com/artifact/commons-net/commons-net -->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.6</version>
</dependency> <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
UploadUtils.java
import org.apache.commons.lang.RandomStringUtils;
public class UploadUtils {
/**
* 36个小写字母和数字
*/
public static final char[] N36_CHARS = { '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z' };
public static String generateFilename(String path, String ext) {
return path + RandomStringUtils.random(8, N36_CHARS) + "." + ext;
}
}
ftp工具类
FtpUtils.java
package com.test.cms.ftp; import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply; import java.io.*;
import java.net.SocketException; public class FtpUtils { private static final String IP="FTP的IP地址"; /**
* ftp端口 默认21
*/
private static final Integer PORT=21; /**
* ftp用户名
*/
private static final String USERNAME="k"; /**
* ftp密码
*/
private static final String PASSWORD="k"; /**
* 上传的固定路径,可以为空
*/
private static final String PATH=""; /**
* 编码。默认UTF-8
*/
private static final String ENCODING="UTF-8"; /**
* 文件上传
* @param path 上传的路径
* @param ext 文件扩展名
* @param in
* @return
*/
public static String storeByExt(String path, String ext, InputStream in) {
String filename = UploadUtils.generateFilename(path, ext);
store(filename, in);
return filename;
} /**
* 上传文件到ftp
* @param remote 文件名称
* @param in
* @return
*/
private static int store(String remote, InputStream in) {
try {
FTPClient ftp = getClient();
if (ftp != null) {
String filename = PATH + remote;
String name = FilenameUtils.getName(filename);
String path = FilenameUtils.getFullPath(filename);
//切换到path路径下
if (!ftp.changeWorkingDirectory(path)) {
//path路径不存在。进行创建
String[] ps = StringUtils.split(path, '/');
String p = "/";
ftp.changeWorkingDirectory(p);
for (String s : ps) {
p += s + "/";
if (!ftp.changeWorkingDirectory(p)) {
//判断 s 文件夹是否存在,不存在才会执行这行代码
ftp.makeDirectory(s);
ftp.changeWorkingDirectory(p);
}
}
}
ftp.storeFile(name, in);
ftp.logout();
ftp.disconnect();
}
in.close();
return 0;
} catch (SocketException e) {
e.printStackTrace();
return 3;
} catch (IOException e) {
e.printStackTrace();
return 4;
}
} /**
* 获取ftp连接客户端
* @return
* @throws SocketException
* @throws IOException
*/
private static FTPClient getClient() throws SocketException, IOException {
FTPClient ftp = new FTPClient();
ftp.addProtocolCommandListener(new PrintCommandListener(
new PrintWriter(System.out)));
ftp.setDefaultPort(PORT);
ftp.connect(IP);
int reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
System.out.println("FTP server refused connection: {}");
ftp.disconnect();
return null;
}
if (!ftp.login(USERNAME, PASSWORD)) {
System.out.println("FTP server refused login: {}, user: {}");
ftp.logout();
ftp.disconnect();
return null;
}
ftp.setControlEncoding(ENCODING);
ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.enterLocalPassiveMode();
return ftp;
} }
控制器,调用方法
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile; @Controller
public class TestController { /**
* 上传文件到ftp方法
* @param file
* @return
*/
@RequestMapping(value = "/saveFile")
@ResponseBody
public String saveFile(MultipartFile file){
try {
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
CloseableHttpClient client = httpClientBuilder.build();
//获取扩展名
String ext = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
//ftp存放的文件夹路径 以“/”开头和结尾,路径不要包含中文,不存在的文件夹会进行创建,储存的文件名随机生成
String uploadPath="/awdfffeee1/202010/";
//上传后的文件路径
String fileUrl = FtpUtils.storeByExt(uploadPath, ext, file.getInputStream());
return fileUrl;
} catch (Exception e) {
e.printStackTrace();
}
return "";
} public static void main(String[] args) { }
}
JAVA上传文件到FTP上的更多相关文章
- java 上传文件到 ftp 服务器
1. java 上传文件到 ftp 服务器 package com.taotao.common.utils; import java.io.File; import java.io.FileInpu ...
- java 上传文件到FTP(centos中的ftp服务)
ftp服务器系统:centos7 提供ftp的服务:vsftpd pom.xml 依赖 <dependency> <groupId>commons-net</groupI ...
- .Net 上传文件到ftp服务器和下载文件
突然发现又很久没有写博客了,想起哎呦,还是写一篇博客记录一下吧,虽然自己还是那个渣渣猿. 最近在做上传文件的功能,上传到ftp文件服务器有利于管理上传文件. 前面的博客有写到layui如何上传文件,然 ...
- 用winscp从本地上传文件到服务器上出现复制文件到远端时错误。
用winscp从本地上传文件到服务器上出现复制文件到远端时错误. 错误码:4 服务器返回的错误消息:write failed 报错如下图所示: 分析过程: 1.刚开始以为是权限不够,后面上网查了一下是 ...
- Git学习笔记——从一台电脑上传文件到Github上
目标:从一台电脑上传文件到Github上 前提: 1.这里假定已在Github上创建了仓库,建立了仓库 2.已在这台电脑上安装了Git客户端 实验环境: 1.Windows 10 64位,已安装了Gi ...
- XShell本地上传文件到Ubuntu上及从Ubuntu下载文件到本地
使用XShell本地上传文件到Ubuntu上及从Ubuntu下载文件到本地. 1.第一种方法是最常用的 :如果下载了Xshell和Xftp,Ctrl+Alt+F就可以选择文件的互传了!(虚拟机/云服务 ...
- Linux上F上传文件到FTP服务器
Linux上上传跟Windows上上传不一样,在Windows上测试没问题,但是放到Linux服务器上跑,上传的文件中文显示乱码.解决方案: FtpUtil.java红色标记处 package cn. ...
- Android上传文件之FTP
android客户端实现FTP文件(包括图片)上传应该没什么难度.写下来就了为了记录一下,望能帮到新手. 需要用到 commons-net-3.0.1.jar,后面附上jar包. 直接上代码: /** ...
- Android 上传文件到 FTP 服务器
实现背景 近期接触到一个需求,就是将文件从Android系统上传到FTP服务器,虽然之前接触过FTP服务器,了解基本的使用流程,但是将此流程从使用习惯转化为代码实现还是有一定难度的.但是基本的流程还是 ...
随机推荐
- R语言与医学统计图形-【15】ggplot2几何对象之线图
ggplot2绘图系统--几何对象之线图 曲线:点连线.路径曲线.时间序列曲线.模型拟合曲线...... 直线:水平直线.垂直直线.斜线. 1.曲线 对象及其参数. #路径图 geom_path(ma ...
- 最短剩余时间优先法则SRTN
- UE4打包启动失败:RunUAT.bat ERROR: AutomationTool failed to compile.
打包配置正常的情况下,出现下面Log: RunUAT.bat ERROR: AutomationTool failed to compile. 基本上,可以先排查下任务管理器中是不是有UE4Edito ...
- C# / VB.NET 在Word中嵌入多媒体(视频、音频)文件
Word中可将Office(Word/Excel/PowerPoint).PDF.txt等文件作为OLE对象插入到文档中,双击该对象可直接访问或编辑该文件,除了以上常见的文件格式对象,也可以插入多媒体 ...
- 自然语言式parsing
got NUM(1) Is NUM(1) an expr? Is NUM(1) a term? Is NUM(1) a number? is_term got -(-) -(-) was back i ...
- HDFS【hadoop3.1.3 windows开发环境搭建】
目录 一.配置hadoop3.1.3 windows环境依赖 配置环境变量 添加到path路径 在cmd中测试 二.idea中的配置 创建工程/模块 添加pom.xml依赖 日志添加--配置log4j ...
- 源码分析-Consumer
消息消费概述 消息消费以组的模式开展,一个消费组内可以包含多个消费者,每一个消费者组可订阅多个主题,消费组之间有集群模式和广播模式两种消费模式. 集群模式,主题下的同一条消息只允许被其中一个消费者消费 ...
- ORACLE profile含义,修改,新增
profiles文件是口令和资源限制的配置集合,包括CPU的时间.I/O的使用.空闲时间.连接时间.并发会话数量.密码策略等对于资源的使用profile可以做到控制会话级别或语句调用级别.oracle ...
- 转 Android应用开发必备的20条技能
https://blog.csdn.net/u012269126/article/details/52433237 有些andorid开发人员感觉很迷茫,接下来该去看系统源码还是继续做应用,但是感觉每 ...
- 【Linux】【Basis】块存储,文件存储,对象存储
1. 块存储: 定义:这种接口通常以QEMU Driver或者Kernel Module的方式存在,这种接口需要实现Linux的Block Device的接口或者QEMU提供的Block Driver ...