SpringMvc 文件上传并且实现与ftp服务器的对接
来源:互联网 发布:淘宝店贷款 编辑:程序博客网 时间:2024/06/08 19:09
1:先声明一个文件服务类
:
@Service("iFileService")public class IFileServiceImpl implements IFileService{ private Logger logger = LoggerFactory.getLogger(IFileServiceImpl.class); //通过路径获得上传文件的路径 public String upload(MultipartFile file,String path){ //获得原始文件路径名 String fileName = file.getOriginalFilename(); logger.info("in service fileName is " + fileName); //获得扩展名 //abc.jpg ---> jpg String fileExtentionName = fileName.substring(fileName.lastIndexOf(".") + 1); //上传文件名 防止上传形同的文件名而造成文件的覆盖 String uploadFileName = UUID.randomUUID().toString() + "." + fileExtentionName; logger.info("开始上传文件,上传文件的文件名:{},上传的路径:{},新文件名:{}",fileName,path,uploadFileName); //创建一个文件对象 File fileDir = new File(path); logger.info("fileDir is " + fileDir.exists()); if(!fileDir.exists()){ //看一看该文件是否存在:如果不存在创建之 //如果存在的话将写权限打开 fileDir.setWritable(true); fileDir.mkdirs(); } //在path路径下创建一个子路径或者文件 File targetFile = new File(path,uploadFileName); logger.info("in service targetFile is " + targetFile); try { //将文件提交到目的地文件系统中 file.transferTo(targetFile); //文件已经上传成功 //将targetFile上传到ftp服务器中 FtpUtil.uploadFile(Lists.newArrayList(targetFile)); //上传到ftp服务器中成功 //上传完成之后删除upload下的文件 targetFile.delete(); } catch (IllegalStateException | IOException e) { logger.error("error",e); return null; } return targetFile.getName(); } }
在upload方法中:传进来两个参数;MultipartFile 和路径名这里的path是应用的根目录的绝对地址,如果你用的是Tomcat的话他就是
你部署的项目的根目录。
1:利用file.getOringinalFilename获得文件名字以利于后期的文件加工。
2:获得文件的扩展名
3:对该文件的名字进行重新的命名保证该文件是独一无二的
4:创建一个文件对象,检查路径或者路径下的问价夹是否存在,如果不存在就打开写权限进行文件夹的建立
5:建立目标文件夹是Path+fileName的全新路径名
6:将文件提交到服务器对应的路径中:file.transferTo(targetFilename);
7:将上传后的文件提交到ftp服务器中这里了涉及到与ftp服务器的对接,下面拿出来单独说明:
关键类:FTpUtil
public class FtpUtil { //生成一个日志类 private static Logger logger = LoggerFactory.getLogger(FtpUtil.class); //用来加载配置文件中的信息 private static String ftpId = 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<File> fileList) throws IOException{ FtpUtil ftpUtil = new FtpUtil(ftpId,21,ftpUser,ftpPass); logger.info("开始连接ftp服务器"); boolean result = ftpUtil.uploadFile("imag",fileList); logger.info("上传文件完成:结果:{}",result); return result; } private boolean uploadFile(String remotePath,List<File> fileList) throws IOException{ boolean uploaded = true; FileInputStream fis = null; //连接到ftp服务器 if(connectFtpServer(this.ip,this.port,this.user,this.pwd)){ try { //切换工作路径 ftpClient.changeWorkingDirectory(remotePath); //设置字符编码 ftpClient.setControlEncoding("UTF-8"); //配置缓冲区 ftpClient.setBufferSize(1024); //将文件类型设置成二级制文件的类型防止乱码的发生 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); //设置为被动传输模式 ftpClient.enterLocalPassiveMode(); for(File fileItem:fileList){ fis = new FileInputStream(fileItem); ftpClient.storeFile(fileItem.getName(),fis); } } catch (IOException e) { // TODO Auto-generated catch block uploaded = false; logger.error("上传错误",e); }finally{ fis.close(); ftpClient.disconnect(); } return uploaded; } return false; } //连接到ftp服务器 private boolean connectFtpServer(String ip,int port,String user,String pass){ boolean isSuccess = false; ftpClient = new FTPClient(); try { ftpClient.connect(ip); isSuccess = ftpClient.login(user, pass); logger.info("ftp connect is " + isSuccess); } catch (IOException e) { logger.error("连接异常",e); logger.error("登录异常",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; } }
要想连接服务器就必须知道其ip地址和用户名和密码:
这里的用户名和密码及ip地址从配置文件中读出来:利用PropertiesUtil这个类:
该工具来设置了一个静态代码块,进行配置文件流的读取操作,public class PropertiesUtil { private static Logger logger = LoggerFactory.getLogger(PropertiesUtil.class); private static Properties props; static { String fileName = "listore.properties"; props = new Properties(); try { props.load(new InputStreamReader(PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName),"UTF-8")); } catch (IOException e) { logger.error("读取配置文件出错",e); } } public static String getProperty(String key){ String value = props.getProperty(key.trim()); if(StringUtils.isBlank(value)){ return null; } return value.trim(); } public static String getProperty(String key,String defaultValue){ String value = props.getProperty(key.trim()); if(StringUtils.isBlank(value)){ value = defaultValue; } return value.trim(); }}
工作原理是:
1:首先先将文件进行封装提交到服务器的响应目录里面,
2:再将文件上传到ftp服务器中去。
3:删除该文件在服务器中的位置,不要删除目录
4:然后在ftp服务器中就可以看到上传的文件了
阅读全文
0 0
- SpringMvc 文件上传并且实现与ftp服务器的对接
- Java连接FTP服务器并且实现对其文件的上传和下载
- Java连接FTP服务器并且实现对其文件的上传和下载
- Java连接FTP并且实现文件的上传和下载
- springmvc文件上传到服务器的实现
- Java代码实现FTP服务器上传文件与下载文件
- 实现FTP的文件上传与下载
- SpringMVC实现文件的上传与下载
- SpringMVC文件上传与下载的实现
- JAVA实现FTP服务器文件的上传,下载,删除功能
- VB实现文件上传到FTP服务器
- VC实现上传文件到FTP服务器
- java实现文件上传ftp服务器功能
- springMVC上传,富文本上传和ftp服务器的配置
- Ftp文件上传的实现
- SpringMVC实现FTP服务器之图片和富文本上传
- ftp服务器上传文件
- springMVC+jersey实现跨服务器文件上传
- C#操作数据库简单辅助工具
- JavaScript基础系列之五 浏览器
- 构建乘积数组
- NDK报错将报错行转换
- C语言 数组与指针(二)
- SpringMvc 文件上传并且实现与ftp服务器的对接
- SimpleDateFormat 的月份问题
- 【JZOJ5316】【清华集训2017模拟8.19】merge
- Maximum Product Subarray -- LeetCode
- shell
- 动态规划:从新手到专家
- H-滑雪(POJ 1088)
- 配置nativescript 开发环境
- GridView使用笔记