-
图片、视频、文件上传 后台java
2020-10-10 15:38:02一、增加配置文件: #图片大小 spring: servlet: multipart: max-request-size: -1 max-file-size: -1 #imgeUrl: /home/uploadFile imgeUrl: /Users/yang/Documents/others ps:图片大小会被限制,所以配置将...一、增加配置文件:
#图片大小 spring: servlet: multipart: max-request-size: -1 max-file-size: -1 #imgeUrl: /home/uploadFile imgeUrl: /Users/yang/Documents/others
ps:图片大小会被限制,所以配置将设置为-1。当然依然可以设置成其他数字。
二、创建一个设置图片大小的bean:
package com.dou.bean; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.MultipartConfigFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.servlet.MultipartConfigElement; @Configuration public class MultipartConfig { @Value("${spring.servlet.multipart.max-request-size}") private String maxFileSize; @Value("${spring.servlet.multipart.max-file-size}") private String maxRequestSize; @Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); // 单个数据大小 factory.setMaxFileSize(maxFileSize); // 总上传数据大小 factory.setMaxRequestSize(maxRequestSize); return factory.createMultipartConfig(); } }
三、创建一个类UploadFileServiceImpl:
package com.dou.service.impl; import com.dou.service.UploadFileService; import com.dou.validator.CommonReturnType; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class UploadFileServiceImpl implements UploadFileService { @Value("${imgeUrl}") private String imgeUrl; private final String IMAGE_URL_FILE="image"; private final String VIDEO_URL_FILE="video"; /** * 上传图片 * @param file * @return */ public CommonReturnType uploadImage(MultipartFile file){ return uploadFile(file,IMAGE_URL_FILE); } /** * 上传视频 * @param file * @return */ public CommonReturnType uploadVideo(MultipartFile file){ return uploadFile(file,VIDEO_URL_FILE); } /** * 上传图片/视频 文件 * @param file * @param filePath * @return */ private CommonReturnType uploadFile(MultipartFile file,String filePath){ Path path = null; try { String fileNameOld=file.getOriginalFilename(); String fileName = null; if(fileNameOld.indexOf(".")!=-1){ String[] fileNameOldArr=fileNameOld.split("\\."); if(fileNameOldArr.length>1){ fileName=fileNameOldArr[0]+String.valueOf(System.currentTimeMillis())+"."+fileNameOldArr[fileNameOldArr.length-1]; } }else{ fileName = String.valueOf(System.currentTimeMillis())+fileNameOld; } path = Paths.get(imgeUrl,filePath,fileName); //在配置文件中定义;文件实际的存储地址 // deleteExistFile(path); System.out.println("save image to path: "+path.toString()); File parentFile = path.getParent().toFile(); if (!parentFile.exists()) { parentFile.mkdirs(); // log.info("parent directory create success:" + parentFile.getPath()); } file.transferTo(path.toFile()); // log.info("file upload success :" + path.toString()); } catch (Exception e) { // log.error(e.getMessage()); // log.error("save image error:" + e); return CommonReturnType.createFalse("失败。"); } return CommonReturnType.create(null!=path?path.toString():""); } /** * 上传图片集合 * @param fileArr * @return */ public CommonReturnType uploadImageArr(List<MultipartFile> fileArr){ return uploadFileArr(fileArr,IMAGE_URL_FILE); } /** * 上传视频集合 * @param fileArr * @return */ public CommonReturnType uploadVideoArr(List<MultipartFile> fileArr){ return uploadFileArr(fileArr,VIDEO_URL_FILE); } /** * 上传文件集合 * @param fileArr * @param filePath * @return */ private CommonReturnType uploadFileArr(List<MultipartFile> fileArr,String filePath){ if(CollectionUtils.isEmpty(fileArr)){ CommonReturnType.createFalse("图片为空,删除更换失败。"); } Map<String,Object> map=new HashMap<>(); List<String> resultList=new ArrayList<>(); int num=0; for(MultipartFile file: fileArr){ CommonReturnType commonReturnType=uploadFile(file,filePath); if(commonReturnType.getStatus()){ resultList.add(String.valueOf(commonReturnType.getData())); }else{ num++; } } if(num>0){ map.put("num","长传图片有:"+num+"个图片有误。"); map.put("list",resultList); return CommonReturnType.createFalse(map); } map.put("list",resultList); return CommonReturnType.create(map); } }
-
实现uni-App图片文件上传到fastdfs,返回缩略图url和原图url 后端代码的书写与相关配置,app端的参数是图片...
2020-10-12 17:42:08* @param file 需要上传的文件—这里专门是为了上传图片而实现的 最大上传图片大小是50M * @param heightWidth 设置缩略图的宽高字符串,比如:_150x150 * @return 返回缩略图的地址和原图地址 * @throws Exception *...java端:
/**
*
* @param file 需要上传的文件—这里专门是为了上传图片而实现的 最大上传图片大小是50M
* @param heightWidth 设置缩略图的宽高字符串,比如:_150x150
* @return 返回缩略图的地址和原图地址
* @throws Exception
*/
@RequestMapping("/upload_image")
public Map<String,Object> upload_image(MultipartFile file,String heightWidth ) throws Exception{String url = fdfsClient.uploadFile(file); Map<String,Object> result = new HashMap<>(); result.put("code", 200); result.put("msg", "上传成功"); if (url.contains("null")){ url=url.substring(url.indexOf("l")+2); } url=fastHost+"/"+url;//为了可以直接返回包含服务器的地址 result.put("url", url); int indexOfPoint=url.lastIndexOf("."); url=url.substring(0,indexOfPoint)+heightWidth+url.substring(indexOfPoint);//设置缩略图路径 result.put("thumbImage_url",url); return result; }
最主要的是fastdfs相关配置:
参考:https://blog.csdn.net/CleverCode/article/details/52278482?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf一,/data/nginx/sbin/nginx -V
例如我的:
[root@ecs-8ba1-0011 data]# /data/nginx/sbin/nginx -V
nginx version: nginx/1.19.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
configure arguments: --prefix=/data/nginx --add-module=/data/fastdfs-nginx-module-master/src看看有没有加载这个模块 --with-http_image_filter_module (需要加载的模块)
没有,则需要加载这个模块。二,安装gd,HttpImageFilterModule模块需要依赖gd-devel的支持
yum -y install gd-devel 安装好之后, #cd /data/nginx-1.19.2 如我的:
然后,# ./configure --prefix=/data/nginx --add-module=/data/fastdfs-nginx-module-master/src --with-http_image_filter_module (之前/data/nginx/sbin/nginx -V 出来的有啥就放啥进去,最后在加上–with-http_image_filter_module)
然后,# make && make install
再 #/data/nginx/sbin/nginx -V 看看是否加载了with-http_image_filter_module该模块
如果没有加载这个,则说明没有加载模块成功!
(需要把Makefile文件删除了 再重新./configure …省略…一遍 然后make &make install )三,接着找到nginx.conf文件,如图:
# vim nginx.conf 进到里面编写:
红色是需要注意的地方!#缩略图配置参数
location ~ group1/M00/(.+)_([0-9]+)x([0-9]+)\.(jpg|jpeg|gif|png) { alias /data/fastdfs/storage_data/data; ngx_fastdfs_module; set $w $2; set $h $3; if ($w != "0") { rewrite group1/M00(.+)_(\d+)x(\d+)\.(jpg|jpeg|gif|png)$ group1/M00$1.$4 break; } if ($h != "0") { rewrite group1/M00(.+)_(\d+)x(\d+)\.(jpg|jpeg|gif|png)$ group1/M00$1.$4 break; } #设置根据宽高比例缩放 image_filter resize $w $h; #设置原图最大值 image_filter_buffer 50M; } location ~ group1/M00/(.+)\.?(.+){ alias /data/fastdfs/storage_data/data; ngx_fastdfs_module; }
对了还需要把自己之前配置的比如我的:
给注释掉!要不然会应该效果!!!四,最后停掉nginx 再开启 比如我的:
#/data/nginx/sbin/nginx -s stop 停掉
#/data/nginx/sbin/nginx 开启效果如图:
说明配置成功了!测试:
postman效果!
服务器测试效果!
浏览器原图:
浏览器缩略图效果:
-
java源码包---java 源码 大量 实例
2013-04-18 23:15:26util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码... -
java源码包2
2013-04-20 11:28:17util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码... -
java源码包
2015-12-01 16:29:37util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码... -
java源码包3
2013-04-20 11:30:13util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码... -
-
JAVA上百实例源码以及开源项目
2016-01-03 17:37:40util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码... -
JAVA上百实例源码以及开源项目源代码
2018-12-11 17:07:42Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印... -
成百上千个Java 源码DEMO 4(1-4是独立压缩包)
2017-03-29 17:40:59Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印... -
成百上千个Java 源码DEMO 3(1-4是独立压缩包)
2017-03-29 17:39:54Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印... -
如何避免Java接收base64字符串的坑?
2020-09-16 13:57:111.1.在配置文件中设置server.max-http-header-size(最大http请求头大小),其默认值为8KB,通常图片的base64会超过默认值,但是也不是越大越好(我设置2MB,然后前端再限制一下图片的大小或者压缩图片),大了反而...一、问题发现
1.可能因为base64字符太长,导致后端处理时出错,表现为前端请求报400错误;
2.前端传数据到后端时可能base64字符串中的特殊字符被替换,例如+被替换成空格,表现为上传的图片不完整
二、问题解决
1.问题1解决方法:
1.1.在配置文件中设置server.max-http-header-size(最大http请求头大小),其默认值为8KB,通常图片的base64会超过默认值,但是也不是越大越好(我设置2MB,然后前端再限制一下图片的大小或者压缩图片),大了反而有大问题,详情请看server.max-http-header-size的坑
2.问题2解决方法:
2.1.前端对base64字符串编码之后再传给后端处理,后端不需要解码,因为接收base64字符串时springmvc会进行一次解码
2.2.也可以通过将被替换的字符手动换回来,不过不推荐使用,你不知道究竟还有没有其他特殊字符被替换
String replace = base64.replace(" ", "+"); MultipartFile multipartFile = BASE64DecodedMultipartFile.base64ToMultipart(replace);
三.建议能不使用base64上传文件就不使用,一张2MB的图片转成base64字符串大概有3000000+个字符,想想都可怕啊
-
-
《Java Web开发实战1200例(第I卷)》(清华出版.卢瀚.王春斌).part2 高清完整PDF版
2016-06-13 12:06:47实例281 限制文件大小的文件上传 11.3 通过组件实现文件上传 实例282 使用jspSmartUpload组件实现文件上传 实例283 使用jspSmartUpload组件实现中文名文件上传 实例284 应用jspSmartUpload组件处理文件上传漏洞... -
Java开发实战1200例.第2卷.part3
2013-05-08 22:46:34实例169 设置背景图片透明度 271 实例170 设置背景色 273 7.3 处理图表的边框 274 实例171 隐藏图表边框 274 实例172 图表边框颜色和笔触 275 7.4 修改图表的图例 277 实例173 设置图例背景色 277 实例174 设置图例... -
Java开发实战1200例.第2卷.part2
2013-05-08 22:45:35实例169 设置背景图片透明度 271 实例170 设置背景色 273 7.3 处理图表的边框 274 实例171 隐藏图表边框 274 实例172 图表边框颜色和笔触 275 7.4 修改图表的图例 277 实例173 设置图例背景色 277 实例174 设置图例... -
Java开发实战1200例.第2卷.part1
2013-05-08 22:44:13实例169 设置背景图片透明度 271 实例170 设置背景色 273 7.3 处理图表的边框 274 实例171 隐藏图表边框 274 实例172 图表边框颜色和笔触 275 7.4 修改图表的图例 277 实例173 设置图例背景色 277 实例174 设置图例... -
JAVA SSM访问web-inf目录下jsp问题
2017-12-26 01:13:59--上传文件拦截器, 设置最大上传文件大小 10M=10*1024*1024 (bytes)--> ${web.maxUploadSize}"/> <!-- <!--class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>--> <!-- <!--depends-on=... -
Java Web开发实战1200例(第2卷)(完整版).(清华出版.卢瀚.王春斌).part1
2016-06-13 20:03:04实例169 设置背景图片透明度 实例170 设置背景色 7.3 处理图表的边框 实例171 隐藏图表边框 实例172 图表边框颜色和笔触 7.4 修改图表的图例 实例173 设置图例背景色 实例174 设置图例边框 实例175 设置图例边缘间距... -
SSH整合后Struts2上传功能失效
2011-01-13 06:07:03-- 指定当struts2配置文件改变后,web框架是否重新加载struts2的配置文件 --> <!-- 指定需要Struts2处理的请求后缀,该属性的默认值是action --> ,do" /> <!-- 指定Web应用的默认编码集。对于获取中文请求... -
-
-
webuploader用 servlet转发给jsp,jsp页面收不到呢?
2017-10-24 01:25:56// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘 dfif.setRepository(new File(request.getRealPath("/")+ "upload"));// 设置存放临时文件的目录,web根目录下的upload目录 ... -
xUtils jar包3个版本
2017-02-17 15:25:32支持大文件上传,上传大文件不会oom; 支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求; 下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件; 返回文本... -
8、导出图片、图片地址和数据一样,只要是能访问的图片都可以导出(有需求、图片大小待解决),图片格式:.JPEG|.jpeg|.JPG|.jpg|.png|.gif 感谢支持、感谢你们(排名不分先后) 蒙蒙的雨(3元微信)、阿星支付宝...
-
新版Android开发教程.rar
2010-12-14 15:49:11HTC HTC HTC HTC Dream/G1 Dream/G1 Dream/G1 Dream/G1 具体配置 硬件 3.17 英寸 HVGA (480 x 320) ; 1150mAh 电池 ;高通 528Mhz 7201 处理器 ; 64MB RAM 、 128MB ROM ; 1GB MicroSD 卡 ; QWERTY 全键盘; 310... -
在本地建立上传图片和文件的文件夹,如我的存放路径是在D:\upload\temp\img,D:\upload\temp\file文件夹下,然后修改tomcat的配置文件server.xml,添加虚拟路径,将对图片和文件的请求url映射到本机硬盘的相应路径,...
-
fckedit编辑器
2013-11-10 14:28:32以允许上传功能,Connector Servlet的baseDir参数值用于设置上传文件存放的位置 在web.xml最后添加标签定义: <taglib-uri>/TestFCKeditor <taglib-location>/WEB-INF/FCKeditor.tld 现在的web.xml文件没有... -
HTML开发王
2013-01-03 11:33:098.2.2 图片的幅面大小(width属性和height属性) 8.2.3 图片的说明(alt属性、longdesc属性) 8.2.4 图片的边框(border属性) 8.2.5 图片的占位符 8.2.6 图片和文字的对齐(align属性) 8.2.7 图片的水平间距和垂直间距...
-
多输入多输出OFDM / OQAM可见光通信的实验演示
-
Android帧缓冲区(FrameBuffer)硬件抽象层(HAL)
-
精通编译Makefile,Nina, 从底层uboot到Android
-
单表查询
-
linux基础入门和项目实战部署系列课程
-
技术-源码
-
自杀式无人机的综合制导与控制设计
-
Typescript入门学习笔记
-
基于SSM实现的房屋租赁系统【附源码】(毕设)
-
MySQL 备份与恢复详解(高低版本 迁移;不同字符集 相互转换;表
-
具有相同独立支配数和安全支配数的树木的特征
-
NFS 实现高可用(DRBD + heartbeat)
-
工程制图 AutoCAD 2012 从二维到三维
-
C#线程参考手册(多线程技术分析)
-
项目管理工具与方法
-
Amoeba 实现 MySQL 高可用、负载均衡和读写分离
-
MySQL中 order by 与 limit 混用,分页有BUG!
-
3D打印机计划程序系统-源码
-
基于无线信道相位的高效物理层秘密密钥生成和认证方案
-
通过脉冲激光烧蚀在空气中合成纳米颗粒:灵活的合成和分离方法