##ssm上传图片文件到ftp(图片压缩处理) ##


开发工具 Eclipse


1.引入jar包

jar包下载地址:阿里中央仓库

2.配置spring-mvc.xml,添加以下代码

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    <property name="defaultEncoding" value="utf-8"</property><!-- 上传图片最大大小5M=5242440 , 10MB=10*1024*1024=10485760字节 20=20971520-->     <property name="maxUploadSize" value="20971520"></property>
</bean>

3.添加上传文件工具类 FtpUtil.java

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.tomcat.util.codec.binary.Base64;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;/*** 上传文件工具类* * 2017-12-23* @author Liner**/
public class FtpUtil {private static FTPClient ftpClient = new FTPClient();private static String encoding = System.getProperty("file.encoding");/*** Description: 向FTP服务器上传文件* * @Version1.0* * @param url*            FTP服务器hostname* @param port*            FTP服务器端口* @param username*            FTP登录账号* @param password*            FTP登录密码* @param path*            FTP服务器保存目录,如果是根目录则为“/”* * @param  base64  数组, 前台返回的图片数据格式* * @return 返回服务器访问链接*/public static  List<String> uploadBase64(String url, int port, String username, String password, String path, String[] base64_files) {List<String>  savelist=new ArrayList<>();try {int reply;// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器ftpClient.connect(url);// ftp.connect(url, port);// 连接FTP服务器// 登录ftpClient.login(username, password);ftpClient.setControlEncoding(encoding);// 检验是否连接成功reply = ftpClient.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {System.out.println("连接失败");ftpClient.disconnect();return savelist;}// 判断文件夹是否已经存在,不存在则创建boolean isExit = ftpClient.makeDirectory(path);if (isExit) {System.out.println("文件夹创建成功");} else {System.out.println("文件夹已存在");}// 转移工作目录至指定目录下boolean change = ftpClient.changeWorkingDirectory(path);ftpClient.setFileType(FTP.BINARY_FILE_TYPE);if (change) {MultipartFile file;for (String base64 : base64_files) {if (!base64.isEmpty()) {//解析base64byte[] b = Base64.decodeBase64(base64);for (int i = 0; i < b.length; ++i) {if (b[i] < 0) {// 调整异常数据b[i] += 256;}}//文件名称String fileName = String.valueOf(System.currentTimeMillis())+".jpg";// 文件名 比如a.jpgfile=new MockMultipartFile(fileName, b);//转换为fileSystem.out.println("文件名:" + fileName);// 自定义的文件名称// System.out.println("执行上传方法!");Boolean bool = ftpClient.storeFile(new String(fileName.getBytes(encoding), "iso-8859-1"),file.getInputStream() );if (bool) {System.out.println("ok!");// 访问链接,保存到数据库String savePath = WeiXinConfig.FTP_HOST + ":" + WeiXinConfig.FTP_PORT + path+ File.separator + fileName;System.out.println(savePath);savelist.add(savePath);}}}}ftpClient.logout();} catch (IOException e) {e.printStackTrace();} finally {if (ftpClient.isConnected()) {try {ftpClient.disconnect();} catch (IOException ioe) {}}}return savelist;}
}

4.Action 响应代码

 /***  上传图片(多个文件)*  Liner 2017-12-19* @param files* @param request* @param response* @return* @throws Exception*/@ResponseBody@RequestMapping(value = "/uploadImagesBase", produces = "application/json; charset=UTF-8")public Object uploadImagesBase(@RequestParam("files") String[] files, HttpServletRequest request,HttpServletResponse response) throws Exception {//@RequestParam("files") MultipartFile[] files,//System.out.println("准备上传文件!");JSONObject json=new JSONObject();for(int i=0;i<files.length;i++){System.out.println(files[i]);}String msg="";if(files.length>0){String path = File.separator + TimeUtil.getShortDateString();// 调用上传文件接口List<String> savePath=FtpUtil.uploadBase64(WeiXinConfig.FTP_HOST, WeiXinConfig.FTP_PORT,WeiXinConfig.FTP_USER_NAME, WeiXinConfig.FTP_PASSWORD, WeiXinConfig.FTP_BASEPATH + path,files);json.accumulate("savepath", savePath);if(savePath.size()>0){msg="ok";}else{msg="error";}}else{msg="files is null";}json.accumulate("msg", msg);return JSONSerializer.toJSON(json);}

5.页面代码(部分代码参考)

参考链接:[https://www.cnblogs.com/guandekuan/p/6739190.html]

(1).选择文件监听

//选择文件监听事件(单个)$("#selectfile").change(function(e) {var files = e.target.files || e.dataTransfer.files;//console.log(files);var file = files[0];var reader = new FileReader();reader.readAsDataURL(file);reader.onload = function(e) {var fileName = file.name; //文件名//var src = this.result;////var index = fileName.lastIndexOf(".");//var filefix = fileName.substring(index, fileName.length); //文件拓展名msgShow('图片正在处理,请稍等...');lrz(file, {width: 640}).then(function(rst) {console.log(rst);//计算文件大小//var size=Math.round(rst.fileLen/1024*100)/100;//console.log(size);img_count++;count++;var img_id = 'img' + count; //图片展示IDvar file_id = 'file' + count; //文件IDimagesList.push(file_id); //保存ID到数组var base = rst.base64; //base64字符串//重命名文件console.log(file);file_map.put(file_id, base.split(',')[1]); //保存到文件集合var html = '<span class="img-item" id=' + img_id + ' >' + '<img src=' + base + ' />' +'<a class="img-delete" href="javascript:;" onclick="delImg(' + count + ')"><span class="mui-icon mui-icon-closeempty"></span></a></span>';$("#image-list").append(html); //追加显示图片预览}).always(function() {//无论是否压缩成功,都执行  });}$('#selectfile').val(''); //初始化});

(2).上传文件代码

     //提交(上传文件方法)function release() {//判断是否需要上传图片if(imagesList.length>0){//加载动画layer.open({type: 2,shadeClose: false,content: '正在上传文件到服务器,请稍等...',});var url = "${ctx}/uploadImagesBase.do";var formData = new FormData(); // 实例化上传方法var file;//把base64格式的文件添加到formDatafor(var i = 0; i < imagesList.length; i++) {file = file_map.get(imagesList[i]);formData.append("files", file);}var xhr = new XMLHttpRequest();xhr.upload.addEventListener("progress", uploadProgress, false);xhr.addEventListener("load", uploadComplete, false);xhr.addEventListener("error", uploadFailed, false);xhr.addEventListener("abort", uploadCanceled, false);xhr.open("POST", url,true);//post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。xhr.send(formData); //开始上传,发送form数据 }else{//没有图片需要上传,直接提交submit();//提交}}// 开始上传function uploadProgress(evt) {// 不做处理}// 上传完成方法function uploadComplete(evt) {console.log(evt);var data = JSON.parse(evt.target.responseText);if(data.msg == 'ok') {//获取返回路径layer.closeAll();saveList=data.savepath;console.log(saveList);if(saveList.length==img_count){//msgShow("上传成功!");submit();//提交}else{msgShow("部分图片上传失败,请检查网络!");}} else {layer.closeAll();msgShow("上传失败!");}}// 上传出错方法function uploadFailed(evt) {// 弹出层msgShow('图片上传失败!');}//function uploadCanceled(evt) {//弹出层msgShow('图片上传已由用户或浏览器取消删除连接!');}function msgShow(msg){//提示layer.open({content: msg,skin: 'msg',time: 2 //2秒后自动关闭});}

6.需要注意的问题
问题1: http://blog.csdn.net/lingirl/article/details/1714806
问题2: 压缩后的base转file文件提交,IOS会出现没法提交的问题

示例代码:JS图片压缩Demo

ssm上传图片文件到ftp(图片压缩处理)相关推荐

  1. js文件上传—图片压缩

    -需求- 前台上传图片过程中,需要在前台对图片进行压缩,然后传到后台. -限制- 使用现有现有后台文件上传处理代码,即:不可修改后台处理代码. -技术问题- js如何压缩图片,图片压缩后如何上传到后台 ...

  2. ftp服务器可以异地传文件吗,FTP图片上传到异地服务器

    #region 创建文件夹  MakeFolder() /// /// 创建文件夹 /// /// 例如:/newDir /// ftp地址(可带目录) /// ftp用户名 /// ftp密码 pu ...

  3. asp.net上传图片文件自动修改图片大小代码

    #region 图片缩放/// <summary>/// 图片缩放/// </summary>/// <param name="savePath"&g ...

  4. ssm 上传图片到mysql_ssm(Spring+Spring MVC+MyBatis)+Web Uploader开发图片文件上传实例,支持批量上传,拖拽上传,复制粘贴上传...

    项目描述 ssm开发一个上传图片的项目 用百度的插件 Web Uploader 上传,不会的去它的官网找API文档 官网的API文档还是比较 坑的.... 百度插件  Web Uploader 上传文 ...

  5. 【Android 内存优化】图片文件压缩 ( Android 原生 API 提供的图片压缩功能能 | 图片质量压缩 | 图片尺寸压缩 )

    文章目录 一. 图片压缩 二. 图片文件压缩类型 三. Android 原生 API 提供的质量压缩 四. Android 原生 API 提供的尺寸压缩 一. 图片压缩 图片压缩 : ① 文件压缩 : ...

  6. (五)图片压缩 —— 优化图片文件、内存

    版权声明:本文为博主原创文章,未经博主允许不得转载. 本文纯个人学习笔记,由于水平有限,难免有所出错,有发现的可以交流一下. 一.图片压缩 Android 中图片是以 Bitmap 形式存在的,而且 ...

  7. vant文件上传Uploader图片压缩

    为什么要对图片进行压缩? 随着科技的发展,手机像素越来越好,拍摄的图片也越来越清晰.图片越清晰,体积也就越大.当移动端上传大图时就会发生卡顿,请求超时的情况.当图片过大时,图片预览也会非常慢,所以需要 ...

  8. 怎么压缩jp2文件?如何在线压缩jp2图片?

    如何在线压缩jp2图片?想要压缩jp2文件可以用压缩图的jp2压缩(jp2压缩 jp2在线压缩工具 手机jp2图片压缩-压缩图)功能来实现,可以在手机.电脑端操作,不用下载软件就可以压缩大小.快来上手 ...

  9. 文件上传MultipartFile实现图片压缩

    MultipartFile上传图片并压缩 背景 之前写过一个图片上传,使用了spring的MultipartFile实现的,比较简单,限制了1M的大小,后来产品需求上传图片需压缩,遂着手开始实现 压缩 ...

最新文章

  1. OpenResty上各种测试用例实操(1)
  2. lumen mysql 事务_简单几部搞定laravel/lumen跨库操作
  3. TensorFlow2简单入门-三维张量
  4. SharePoint Set-SPUser 命令拒绝访问
  5. 学习Docker从小白到入门
  6. RabbitMQ—性能测试
  7. Rocketmq源码分析(一)整体架构
  8. 信息学奥赛一本通 1310:【例2.2】车厢重组
  9. linux pae内核安装,Linux 安装PAE内核
  10. win10安装Unbuntu的Linux系统的虚拟机02
  11. Unity2019.2中文更新日志速览版
  12. 对象的序列化----将对象转化成二进制数据流
  13. python横向输出字符串_Python字符串拼接和格式化输出
  14. Mac电脑如何实现Word一键转PPT
  15. java后端获取时间
  16. java怎么捕捉游戏窗口_捕捉桌面上的窗口信息
  17. Linux文件复制、移动、删除等操作命令
  18. JAVA高级面试题汇总及答案
  19. 【Java】Java中空字符的写法
  20. [cocos2dx开发技巧2]工具CocosBuilder的使用--集成

热门文章

  1. HTTP协议相关的问题
  2. 新闻文本分类 TextCNN
  3. 计算机安全沙箱,安全沙箱
  4. PHP项目上传到华为云服务器,php项目上传到云服务器
  5. GAN(生成对抗网络) and CGAN(条件生成对抗网络)
  6. Stm32CubeMX配置RTC时钟
  7. linux unix novel,《手机》:书写的是语言,表达的是孤独www.smallnovel.com
  8. 深度学习-卷积神经网络(CNN)
  9. 计算机组成原理实验——单周期CPU相关问题
  10. (十 七)张量函数的微分与导数