博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
文件上传与下载总结
阅读量:6158 次
发布时间:2019-06-21

本文共 5630 字,大约阅读时间需要 18 分钟。

一直感觉文件上传与下载是个很麻烦的事情,今天一早突然就想克服下这个问题:

简单的先总结下,后面补充具体的实现,其实归根到底就这几件事情:

1、搭建文件服务器:搭建ftp文件服务器,使用nginx作为http服务,在windows上面实现对文件服务器资源的访问。

2、文件服务器搭建完了,那么怎么进行上传,那就需要我们的java代码了:

(1)位置:文件在哪里,如何获取文件?

(2)上传的位置:文件上传到哪里?即上传文件的地址端口等等,要获取到,连接上才可以?

(3)文件名的处理:原来的文件名是多少,即原始file的文件名,上传到文件服务器上面的文件名如何命名?

(4)最后,使用什么工具来进行这些操作。SpringMVC 用的是 的MultipartFile来进行文件上传。有没有更好的处理连接文件服务器的工具。ftpclient。

3、下面我们具体来说说怎么使用吧,尤其是使用了springboot后如何来进行文件的上传下载?

使用springboot进行图片上传功能,这里我们依然是使用的springMVC的MultipartFile这个工具。其实根本思路也是如此:

举个例子我们从计算机中的D盘获取到文件A,这个时候程序是怎么来获取的呢,这里我们从前端页面获取到这个A后,在后台我们通过servlet的上下文环境会创建一个相对路径来保存这个文件A。一般创建的文件夹会在webapp下面,会创建一个例如upload的文件夹。

然后我们会通过字符串的处理方式获取文件A的后缀名,重新命名一个新的名称。

然后我们从upload中将这个文件上传到ftp服务器上面。这个时候我们就需要连接ftp服务器了。此时的ftp服务器我们使用ftpclient来进行与服务器的连接登录等问题。

好了,至此文件已经上传到了ftp服务器上,这个时候不要忘记了,把upload文件中的文件删除,因为我们会不停的上传文件,会导致这个upload中的文件内容很多。

这里是使用的propertiesutil来读取属性配置文件:

工具类我们看下:

package com.mmall.util;import org.apache.commons.net.ftp.FTPClient;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.List;/** * Created by geely */public class FTPUtil {    private static  final Logger logger = LoggerFactory.getLogger(FTPUtil.class);    private static String ftpIp = PropertiesUtil.getProperty("ftp.server.ip");    private static String ftpUser = PropertiesUtil.getProperty("ftp.user");    private static String ftpPass = PropertiesUtil.getProperty("ftp.pass");    public FTPUtil(String ip,int port,String user,String pwd){        this.ip = ip;        this.port = port;        this.user = user;        this.pwd = pwd;    }    public static boolean uploadFile(List
fileList) throws IOException { FTPUtil ftpUtil = new FTPUtil(ftpIp,21,ftpUser,ftpPass); logger.info("开始连接ftp服务器"); boolean result = ftpUtil.uploadFile("img",fileList); logger.info("开始连接ftp服务器,结束上传,上传结果:{}"); return result; } private boolean uploadFile(String remotePath,List
fileList) throws IOException { boolean uploaded = true; FileInputStream fis = null; //连接FTP服务器 if(connectServer(this.ip,this.port,this.user,this.pwd)){ try { ftpClient.changeWorkingDirectory(remotePath); ftpClient.setBufferSize(1024); ftpClient.setControlEncoding("UTF-8"); ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); for(File fileItem : fileList){ fis = new FileInputStream(fileItem); ftpClient.storeFile(fileItem.getName(),fis); } } catch (IOException e) { logger.error("上传文件异常",e); uploaded = false; e.printStackTrace(); } finally { fis.close(); ftpClient.disconnect(); } } return uploaded; } private boolean connectServer(String ip,int port,String user,String pwd){ boolean isSuccess = false; ftpClient = new FTPClient(); try { ftpClient.connect(ip); isSuccess = ftpClient.login(user,pwd); } catch (IOException e) { logger.error("连接FTP服务器异常",e); } return isSuccess; } private String ip; private int port; private String user; private String pwd; private FTPClient ftpClient; public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public FTPClient getFtpClient() { return ftpClient; } public void setFtpClient(FTPClient ftpClient) { this.ftpClient = ftpClient; }}  处理逻辑的service类:package com.mmall.service.impl;import com.google.common.collect.Lists;import com.mmall.service.IFileService;import com.mmall.util.FTPUtil;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Service;import org.springframework.web.multipart.MultipartFile;import java.io.File;import java.io.IOException;import java.util.UUID;/** * Created by geely */@Service("iFileService")public class FileServiceImpl implements IFileService { private Logger logger = LoggerFactory.getLogger(FileServiceImpl.class); public String upload(MultipartFile file,String path){ String fileName = file.getOriginalFilename(); //扩展名 //abc.jpg String fileExtensionName = fileName.substring(fileName.lastIndexOf(".")+1); String uploadFileName = UUID.randomUUID().toString()+"."+fileExtensionName; logger.info("开始上传文件,上传文件的文件名:{},上传的路径:{},新文件名:{}",fileName,path,uploadFileName); File fileDir = new File(path); if(!fileDir.exists()){ fileDir.setWritable(true); fileDir.mkdirs(); } File targetFile = new File(path,uploadFileName); try { file.transferTo(targetFile); //文件已经上传成功了 FTPUtil.uploadFile(Lists.newArrayList(targetFile)); //已经上传到ftp服务器上 targetFile.delete(); } catch (IOException e) { logger.error("上传文件异常",e); return null; } //A:abc.jpg //B:abc.jpg return targetFile.getName(); }}

  

 

转载于:https://www.cnblogs.com/fengli9998/p/7927346.html

你可能感兴趣的文章
Subversion使用Redmine帐户验证简单应用、高级应用以及优化
查看>>
Javascript Ajax 异步请求
查看>>
DBCP连接池
查看>>
cannot run programing "db2"
查看>>
mysql做主从relay-log问题
查看>>
Docker镜像与容器命令
查看>>
批量删除oracle中以相同类型字母开头的表
查看>>
Java基础学习总结(4)——对象转型
查看>>
BZOJ3239Discrete Logging——BSGS
查看>>
SpringMVC权限管理
查看>>
spring 整合 redis 配置
查看>>
cacti分组发飞信模块开发
查看>>
浅析LUA中游戏脚本语言之魔兽世界
查看>>
飞翔的秘密
查看>>
Red Hat 安装源包出错 Package xxx.rpm is not signed
查看>>
编译安装mysql-5.6.16.tar.gz
查看>>
活在当下
查看>>
每天进步一点----- MediaPlayer
查看>>
PowerDesigner中CDM和PDM如何定义外键关系
查看>>
跨域-学习笔记
查看>>