Java代码实现上传文件到Ftp服务器
2018-03-14 22:28
981 查看
近期项目中,需要在后台上传批量产品操作视频在公众号菜单中展示供用户在线学习。最初的打算是用阿里OSS对象存储,但是出于流量成本考虑没有采用。采取的方案是把视频上传到项目服务器上,第一种方案是用流上传,但是遇到各种坑,方法行不通。老大给的方案是用ftp方式进行上传,之前用过ftp客户端直接把本地文件拖到服务器上,思路就是用代码模拟这个拖的操作。废话不多说,直接上代码:
1 添加maven依赖
<!--ftp相关-->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-ftp</artifactId>
<version>2.13.2</version>
</dependency>2 根据网上资料建议 配置FTPClient相关信息
希望能给用到的小伙伴一个借鉴,少踩坑。
霍金去世了,有点难过!
-2018/03/14 于上海
1 添加maven依赖
<!--ftp相关-->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-ftp</artifactId>
<version>2.13.2</version>
</dependency>2 根据网上资料建议 配置FTPClient相关信息
@Log4j public class FtpUtils { private static int port=21;//ftp服务器端口 public static FTPClient getClient(){ FTPClient ftpClient = new FTPClient(); //ftp服务器地址 String url="url"; //ftp服务器登陆用户名 String name="userName"; //ftp服务器登陆密码 String password="mima"; //ftp服务器目标文件位置 String MENU="/xx"; try { log.info("开始连接ftp服务器"); long start = System.currentTimeMillis(); ftpClient.connect(url,port); ftpClient.login(name, password); boolean flag = FTPReply.isPositiveCompletion(ftpClient.getReplyCode()); if (!flag){ throw new com.bingkun.weixin.common.exception.ApplicationException("ftp服务器连接失败!"); } long end = System.currentTimeMillis(); log.info("连接ftp服务器成功,耗时"+(end-start)+"毫秒"); ftpClient.setCharset(Charset.forName("UTF-8")); ftpClient.setControlEncoding("UTF-8"); //ftpClient.changeToParentDirectory();//切换到根目录 ftpClient.changeWorkingDirectory(MENU ); //设置文件类型 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); } catch (IOException e) { e.printStackTrace(); } return ftpClient; }3 Controller及具体上传逻辑
@Component @Log4j public class FtpServiceImpl implements FtpService { private String dateFormat="yyyyMMdd"; //http前缀 private String prefix="http://"; //ftp服务器地址 String url= ""; //ftp服务器目标文件位置 String menu=""; @Override public Map<String, Object> upload(MultipartFile file) { Transaction cat = Cat.newTransaction(Constants.FTP_UPLOAD, "uploadFile"); try{ Map<String, Object> map = catFtpUpload(file); cat.setStatus(Transaction.SUCCESS); return map; } catch (Exception e){ Cat.logError(e); cat.setStatus(e); }finally { cat.complete(); } return null; } public Map<String, Object> catFtpUpload(MultipartFile file) { Map map=new HashMap(); FTPClient client = FtpUtils.getClient(); String originalFilename = file.getOriginalFilename(); String randomString=UUID.randomUUID().toString().replaceAll("-",""); //文件后缀 String suffix=originalFilename.substring(originalFilename.lastIndexOf(".")); String fileName=(DateUtils.dateFormat(new Date(), dateFormat))+randomString+suffix; String finalUrl=prefix+url+menu+"/"+fileName; try { long start = System.currentTimeMillis(); log.info(String.format("开始上传文件:%s",originalFilename)); InputStream inputStream = file.getInputStream(); boolean flag = client.storeFile(fileName, inputStream); if (flag){ long end = System.currentTimeMillis(); log.info(String.format("文件:%s上传成功,耗时:%d毫秒",originalFilename,(end-start))); map.put("url",finalUrl); } inputStream.close(); // client.logout();//退出登录 退出就执行不成功了 bug } catch (IOException e) { e.printStackTrace(); }finally { if (client.isConnected()){ try { client.disconnect(); } catch (IOException e) { log.error(String.format("ftp关闭连接失败:%s",e)); } } } return map; }更新如上,添加日志及Cat监控,关闭连接操作。
希望能给用到的小伙伴一个借鉴,少踩坑。
霍金去世了,有点难过!
-2018/03/14 于上海
相关文章推荐
- java+jsp代码实现从FTP服务器上传下载文件
- Java代码实现FTP服务器上传文件与下载文件
- Java实现ftp上传下载、删除文件及在ftp服务器上传文件夹的方法
- JAVA连接FTP服务器,并上传/下载文件代码
- java代码实现从FTP服务器上拉取文件到本地
- JAVA中使用FTPClient实现文件上传下载实例代码
- linux ftp上传文件用java代码实现
- java实现文件上传下载至ftp服务器
- java操作ftp实现文件的上传下载(适用于图片文档服务器)
- Java实现FTP文件的上传和下载功能的实例代码
- java实现把文件上传至ftp服务器
- ftp 实现文件的上传下载以及列出文件列表Java代码(未测试)
- Java实现FTP服务器的上传、下载、删除、查看文件列表
- java实现文件上传下载至ftp服务器
- JAVA中使用FTPClient实现文件上传下载实例代码
- java实现把文件上传至ftp服务器
- java实现把文件上传至ftp服务器
- JAVA实现FTP服务器文件的上传,下载,删除功能
- JAVA连接FTP服务器,并上传/下载文件代码
- ftp 实现文件的上传下载以及列出文件列表Java代码