失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 上传图片文件到ftp服务器

上传图片文件到ftp服务器

时间:2022-03-08 11:17:59

相关推荐

上传图片文件到ftp服务器

效果图 :

注 : ftp服务器的搭建及创建账号请自行百度 , 这里主要介绍图片上传的实现

图片上传工具类 :

import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import .ftp.FTP;import .ftp.FTPClient;import .ftp.FTPFile;import .ftp.FTPReply;public class FtpUtil {/** * Description: 向FTP服务器上传文件 * @param host FTP服务器hostname * @param port FTP服务器端口 * @param username FTP登录账号 * @param password FTP登录密码 * @param basePath FTP服务器基础目录 * @param filePath FTP服务器文件存放路径。例如分日期存放://12/12。文件的路径为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(); ftp.setControlEncoding("UTF-8");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(new String(tempPath.getBytes("UTF-8"),"iso-8859-1"))) { return result; } else { ftp.changeWorkingDirectory(tempPath); } } } } //设置上传文件的类型为二进制类型 ftp.setFileType(FTP.BINARY_FILE_TYPE); //上传文件 ftp.enterLocalPassiveMode();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; }

在service层内创建接口及接口实现类

public interface PictureService {Map uploadPicture(MultipartFile uploadFile);}

import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Map;import org.springframework.stereotype.Service;import org.springframework.web.multipart.MultipartFile;import com.demo.service.PictureService;import com.demo.util.FtpUtil;import com.demo.util.IDUtil;@Servicepublic class PictureServiceImpl implements PictureService { //获取ip地址 private static final String FTP_ADDRESS = "填写自己服务器的外网ip地址"; //端口号 private static final int FTP_PORT = 21; //用户名 private static final String FTP_USERNAME = "ftp服务器账号"; //密码 private static final String FTP_PASSWORD = "密码"; //基本路径 private static final String FTP_BASEPATH = "\\"; //下载地址的基础url private static final String IMAGE_BASE_URL = "http://ip地址/ftp"; @Override public Map uploadPicture(MultipartFile uploadFile) { Map map = new HashMap(); try { // 生成一个文件名 // 获取旧的名字 String oldName = uploadFile.getOriginalFilename(); String newName = IDUtil.genImageName(); //新名字 newName = newName + oldName.substring(oldName.lastIndexOf("."));//上传的路径 SimpleDateFormat df = new SimpleDateFormat("/yyyy/MM/dd/"); //以日期创建文件夹利于管理String imagePath = df.format(new Date()); //当前系统时间保证文件名不重复String ftp = "ftp://";String url = ftp + FTP_ADDRESS + imagePath + newName;System.out.println("图片访问路径 : " + url);//端口号int port = FTP_PORT; //调用方法,上传文件 boolean result = FtpUtil.uploadFile(FTP_ADDRESS, port, FTP_USERNAME, FTP_PASSWORD, FTP_BASEPATH, imagePath, newName, uploadFile.getInputStream()); //判断是否上传成功 if (!result) { map.put("code", 0);map.put("msg", "上传失败");return map; } map.put("code", 1);map.put("msg", "上传成功");map.put("url", url);return map; } catch (IOException e) { map.put("code", 0);map.put("msg", "上传失败");return map; } } }

实际调用 :

@RequestMapping(value = "insert_detail")public String insert_detail(@RequestParam(value = "file", required = false) MultipartFile file,@RequestParam(value = "productOne", required = false) MultipartFile productOne,@RequestParam(value = "productTwo", required = false) MultipartFile productTwo,@RequestParam(value = "productThree", required = false) MultipartFile productThree,@RequestParam(value = "productFour", required = false) MultipartFile productFour,@RequestParam(value = "productFive", required = false) MultipartFile productFive,@RequestParam(value = "productSix", required = false) MultipartFile productSix,ShopDetail shopdetail) {Login user = (Login) request.getSession().getAttribute("user");String createCode = String.valueOf(user.getId());String createName = user.getRealname();//控制流程可以忽略 根据自己的业务来编写if(!file.isEmpty()){Map map = pictureService.uploadPicture(file);String ftpPath = (String) map.get("url");String posPath = ftpPath.substring(20);String url = FRONTPATH + posPath;shopdetail.setUrl(url);}if (!productOne.isEmpty()) {Map map = pictureService.uploadPicture(productOne);String ftpPath = (String) map.get("url");String posPath = ftpPath.substring(20);String url = FRONTPATH + posPath;shopdetail.setProduct1(url);}if (!productTwo.isEmpty()) {Map map = pictureService.uploadPicture(productTwo);String ftpPath = (String) map.get("url");String posPath = ftpPath.substring(20);String url = FRONTPATH + posPath;shopdetail.setProduct2(url);}if (!productThree.isEmpty()) {Map map = pictureService.uploadPicture(productThree);String ftpPath = (String) map.get("url");String posPath = ftpPath.substring(20);String url = FRONTPATH + posPath;shopdetail.setProduct3(url);}if (!productFour.isEmpty()) {Map map = pictureService.uploadPicture(productFour);String ftpPath = (String) map.get("url");String posPath = ftpPath.substring(20);String url = FRONTPATH + posPath;shopdetail.setProduct4(url);}if (!productFive.isEmpty()) {Map map = pictureService.uploadPicture(productFive);String ftpPath = (String) map.get("url");String posPath = ftpPath.substring(20);String url = FRONTPATH + posPath;shopdetail.setProduct5(url);}if (!productSix.isEmpty()) {Map map = pictureService.uploadPicture(productSix);String ftpPath = (String) map.get("url");String posPath = ftpPath.substring(20);String url = FRONTPATH + posPath;shopdetail.setProduct6(url);}shopdetail.setCreateCode(createCode);shopdetail.setCreateName(createName);sdService.addShopDetail(shopdetail);System.out.println("图片上传成功");return "redirect:query_detail";}

实际调用非常简单 , 只需要一句pictureService.uploadPicture("页面传递过来的文件名称")即可实现 , 返回的是map对象 , 通过map拿到ftp的路径 , 及经过字符串处理后的文件名称 , 拼接成完整的图片文件路径进行保存 , 最后查看上传后的文件效果如下 :

可以看到文件夹是以日期年月日进行分类 , 管理起来非常方便 , 到此图片上传已经可以实现 , 以我个人为例 , 我ftp资源存放目录设置的是项目工程目录 , 当重新发布的时候会导致之前上传的图片被清空 , 需要提前备份好ftp上传的图片资源复制到准备重新发布的项目目录中 , 再进行发布 , 以免资源丢失造成不必要的麻烦

如果觉得《上传图片文件到ftp服务器》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。