项目总结21:项目总结21:input实现多图上传(FormData)(上传OSS并保存数据库)
项目总结21:input实现多图上传(FormData)(上传OSS并保存数据库)
备注:本案例,作为Demo,包含少量的项目业务逻辑,input多图上传的逻辑是完整的;
不废话直接上代码
1-前端标签
//属性:multiple; 表示input标签支持选择多图
//属性:accept="image/*"; 顾虑选择范围,只允许上传图片
//'${entity.id}' 是业务数据,和多图上传本身没有直接关联
<input type="file" onchange="uploadAndSaveMaterialPic(this,'${entity.id}')" multiple accept="image/*" />
2-前端JavaScript
<script>
//1-oss上传材料图片并保存到数据(基本逻辑:先将图片全部上传到OSS并返回图片URL列表,然后将图片URL列表保存到数据库)
function uploadAndSaveMaterialPic(data,materialId) {
var files = data.files; //1-封装formdata
var formData = new FormData();
for(var i=0; i<files.length; i++){
formData.append("mulFiles", files[i]);//1-封装图片
}
formData.append("fileType", 1);//2-封装文件类型-1表示是图片
//2-封装ajaxObject
var ajaxObject ={};
ajaxObject.success = function(result){
//保存图片
var ajaxObject = {};
ajaxObject.url = "productmaterialfile/saveBatch";
ajaxObject.data = {materialId: materialId,fileUrlList:result.data}
ajaxObject.success = function(){
//location.reload();
}
ajaxPost(ajaxObject);
}
//3-上传图片到OSS,并在success时,回调保存数据到数据的逻辑
uploadMultiFileToOSS(ajaxObject,formData);
} //2-上传多个文件导OSS
function uploadMultiFileToOSS(ajaxObject,formData){
debugger;
var success = ajaxObject.success; $.ajax({
url: "upload/multi/file",
type: "post",
data: formData,
cache: false,
processData: false,
contentType: false,
success:function(result){
console.log(result.code+" "+ result.msg);
if (result.code==200){
if(success){
console.log("file url -->"+result.data);
success(result);
}
}else{
console.log(result.msg);
}
},
error:function(e){
bootbox.alert("上传失败");
}
});
}
</script>
3-后台Controller
//1-后台-上传图片到OSS
@RequestMapping(value = { "upload/multi/file" }, method = { RequestMethod.POST }, produces = { JSON_UTF8 })
@ResponseBody
public Object uploadMultiFile(
@RequestParam (value="fileType",required=true)Integer fileType,
@RequestParam(value="mulFiles",required=true) MultipartFile[] mulFiles,
HttpServletRequest request
) throws Exception{
if(mulFiles == null || mulFiles.length == 0){
return ResponseMessageEnum.ERROR_NO_FILE.appendEmptyData();
}
try {
//保存图片到OSS,并返回图片url列表,这里不具体展开
List<String> filePathList = AliyunOSSUtil.uploadMultiFile(mulFiles, UplocadFilePathTypeEnum.getNameByKey(fileType));
return ResponseMessageEnum.SUCCESS.appendObjectToString(filePathList);
} catch (Exception e) {
return ResponseMessageEnum.FILE_UPLOAD_ERROR.appendEmptyData();
} } //2-后台-爆保存图片数据到数据库
@RequestMapping(value = "productmaterialfile/saveBatch", method = RequestMethod.POST, produces = { JSON_UTF8 })
@ResponseBody
public String saveBatch(@RequestBody ProductMaterialMultiFileReq productMaterialMultiFileReq) throws Exception { try {
/**保存数据到数据库的逻辑shenglue*/
} catch (Exception e) {
logger.warn(e.toString(), e);
return ResponseMessageEnum.SERVER_SQL_ERROR.toString();
} return ResponseMessageEnum.SUCCESS.appendEmptyData();
} //后台-请求参数接收实体类
public class ProductMaterialMultiFileReq {
private Long materialId; // 素材id
List<String> fileUrlList; public Long getMaterialId() {
return materialId;
} public void setMaterialId(Long materialId) {
this.materialId = materialId;
} public List<String> getFileUrlList() {
return fileUrlList;
} public void setFileUrlList(List<String> fileUrlList) {
this.fileUrlList = fileUrlList;
}
}
项目总结21:项目总结21:input实现多图上传(FormData)(上传OSS并保存数据库)的更多相关文章
- Android Studio项目转Eclipse项目
Android Studio项目的目录结构和Eclipse项目不同.如何转换? 以FloatingAction 项目为例:实现向上滑动隐藏悬浮按钮,向上滑动显示悬浮按钮. GitHub 地址:http ...
- web项目引用Java项目,连接报错error HTTP Status 500 - Servlet execution threw an exception
错误信息 项目背景: 一个web项目引用一个java Project,项目中添加了引用,但是打开页面访问,总报500错误.提示:servlet初始化错误. 环境:Eclipse luna JDK: 1 ...
- .NET大型B2C开源项目nopcommerce解析——项目结构
.NET大型B2C开源项目nopcommerce解析——项目结构 编写本文档是为了向程序员说明nopcommerce的解决方案结构,亦是程序员开发nopcommerce的居家必备良书.首先nopcom ...
- 2、MyEclipse和Eclipse调优,MyEclipse配置(tomcat和jdk的内存设置),jar引入相关知识点,将Java项目编程web项目的办法
1.WindowàPreferenceàGeneralàWorkspaceàText file encoding都改成UTF-8 2.WindowàPreferenceàGeneralàEdito ...
- VS中空项目、win32项目、控制台程序的区别(转)
空项目,大多数想单纯创建c++工程的新同学,打开vs后很可能不知道选择创建什么工程,这时候请相信我,空项目是你最好的选择.因为空工程不包含任何的源代码文件,接下来你只需要在相应的源代码文件夹和头文件文 ...
- Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目
Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...
- 【MSP是什么】MSP认证之项目集与项目群的关系和区别
项目群和项目集都是一个意思,翻译时没有统一口径造成的.只要能与项目组合区别开就可以了. 项目集与项目群的区别,不在于那些项目自身,而在于管理者的思想,管理者对待项目的态度.项目集与项目群,首先都是多个 ...
- eclipse中 将java项目转换为web项目
来自:http://jadethao.iteye.com/blog/1331308 eclipse中 将java项目转换为web项目 1.找到项目工作空间目录,打开.project文件,并修改文件, ...
- Java web项目引用java项目,类型找不到
Java web项目引用java项目,类型找不到 错误信息: java.lang.ClassNotFoundException: org.codehaus.jackson.map.ObjectMapp ...
随机推荐
- Anaconda安装及配置
简介 Anaconda(官方网站)指的是一个开源的Python发行版本,可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本.Anaconda包含了conda.Python在内的超过18 ...
- C# Winform开发程序调用VLC播放器控件播放视频.
VLC是个好东西,支持的格式多,还无广告,关键还有调用它的播放控件不用安装. 开个文章记录下调用这个控件的流水账,以便以后需要的时候查阅 创建工程 首先新建一个Winform工程. 这里姑且叫做VLC ...
- Linux下导入CA证书
在部署路由器的时候,发现路由器不支持从https安装应用,经过调查,发现是路由器里面没导入证书 安装ca-certificates即可解决. opkg install ca-certificates
- 2016蓝桥杯"取球博弈"问题
较难,网上有能得出正确结果的代码,但是读了一下,像是拼凑出的结果,逻辑不通,代码和注释不符 参考网上代码写了一版,结构相对清晰,注释比较详细 题目很长: 两个人玩取球的游戏.一共有N个球,每人轮流取球 ...
- vs2015中SQLSERVER数据库项目引用系统视图
近期使用VS中的SQLSERVER数据库项目进行项目开发,由于有很多自动化脚本会访问系统视图,例如sysobjects之类的,在项目中的脚本总是提示无法解析的引用,解决办法如下: 添加数据库引用 添加 ...
- windows开发各种dll缺失
推荐使用 depend这个工具,非常好用 http://www.dependencywalker.com/ 打开对应的文件,就能看到缺失了哪些dll 感谢博主: https://blog.csdn.n ...
- .net core 自动生成文档
如下图自动生成显示接口文档注释
- 一些常见的Java面试题 & 面试感悟
< 前言 > 近期在面试,深感这个行业的浮躁,一些菜不辣基的弱鸡开出的工资待遇要求,超过了我.不知道他们是怎么拿到那么高的工资的,难道是他在公司有亲戚朋友吗?有后台吗?是行业热钱真的过多了 ...
- loadrunner代理录制脚本
1.打开loadrunner录制脚本选项: 2.start recording弹窗选择options: 3.设置loadrunner端口,可自定义:后面的浏览器设置代理需要用到此处设置的端口号: 4 ...
- python3 在文件确实存在的情况下,运行提示找不到文件
提示 [Errno 2] No such file or directory: 但是路径下确实存在此文件,在不改动的情况下,再次运行,执行成功. 百思不得其解,看到此链接下的回答 http://bbs ...