项目总结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并保存数据库)的更多相关文章

  1. Android Studio项目转Eclipse项目

    Android Studio项目的目录结构和Eclipse项目不同.如何转换? 以FloatingAction 项目为例:实现向上滑动隐藏悬浮按钮,向上滑动显示悬浮按钮. GitHub 地址:http ...

  2. web项目引用Java项目,连接报错error HTTP Status 500 - Servlet execution threw an exception

    错误信息 项目背景: 一个web项目引用一个java Project,项目中添加了引用,但是打开页面访问,总报500错误.提示:servlet初始化错误. 环境:Eclipse luna JDK: 1 ...

  3. .NET大型B2C开源项目nopcommerce解析——项目结构

    .NET大型B2C开源项目nopcommerce解析——项目结构 编写本文档是为了向程序员说明nopcommerce的解决方案结构,亦是程序员开发nopcommerce的居家必备良书.首先nopcom ...

  4. 2、MyEclipse和Eclipse调优,MyEclipse配置(tomcat和jdk的内存设置),jar引入相关知识点,将Java项目编程web项目的办法

    1.WindowàPreferenceàGeneralàWorkspaceàText file encoding都改成UTF-8 2.WindowàPreferenceàGeneralàEdito ...

  5. VS中空项目、win32项目、控制台程序的区别(转)

    空项目,大多数想单纯创建c++工程的新同学,打开vs后很可能不知道选择创建什么工程,这时候请相信我,空项目是你最好的选择.因为空工程不包含任何的源代码文件,接下来你只需要在相应的源代码文件夹和头文件文 ...

  6. Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目

    Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...

  7. 【MSP是什么】MSP认证之项目集与项目群的关系和区别

    项目群和项目集都是一个意思,翻译时没有统一口径造成的.只要能与项目组合区别开就可以了. 项目集与项目群的区别,不在于那些项目自身,而在于管理者的思想,管理者对待项目的态度.项目集与项目群,首先都是多个 ...

  8. eclipse中 将java项目转换为web项目

    来自:http://jadethao.iteye.com/blog/1331308 eclipse中 将java项目转换为web项目 1.找到项目工作空间目录,打开.project文件,并修改文件,  ...

  9. Java web项目引用java项目,类型找不到

    Java web项目引用java项目,类型找不到 错误信息: java.lang.ClassNotFoundException: org.codehaus.jackson.map.ObjectMapp ...

随机推荐

  1. 记录2-在mac上安装ubuntu 16.04 LTS

    前几天升级了我用了六七年mac硬件,内存由4G变为8G,硬盘也换成1T SSD,索性把一直想装的ubuntu也装了,方便温习下以前的工作环境. 我比较喜欢LTS的版本,所以安装了16.04. 主要步骤 ...

  2. C# 文字滚动特效(上下滚动)

    本程序改编至网上下载的一个自定义控件,原控件是左右滚动效果,类似于跑马灯效果,由于项目需要,改编为上下滚动. 前期没有实现自动折行,今天刚加上自动折行. using System; using Sys ...

  3. [php]php设计模式 (总结)

    转载自[php]php设计模式 (总结) 传统的23种模式(没有区分简单工厂与抽象工厂) http://www.cnblogs.com/bluefrog/archive/2011/01/04/1925 ...

  4. 数据库索引的数据结构b+树

    b+树的查找过程:如上图所示,如果要查找数据项29,那么首先会把磁盘块1由磁盘加载到内存,此时发生一次IO,在内存中用二分查找确定29在17和35之间,锁定磁盘块1的P2指针,             ...

  5. springboot学习二:配置文件配置

    springboot默认读取application*.properties #######spring配置####### spring.profiles.active=dev //引入开发配置文件 a ...

  6. intellij与eclipse默认快捷键对比

    最近想用intellij,于是找找快捷键.用惯了eclipse,都不太适应intellij的快捷键.慢慢的就适应了常用的快捷键 Idea 与 Eclipse 快捷键的区别,上为Eclipse的快捷键, ...

  7. 【HDFS API编程】jUnit封装-改写创建文件夹

    首先:什么是jUnit  回顾: https://www.cnblogs.com/Liuyt-61/p/10374732.html 上一节我们知道: /** * 使用Java API操作HDFS文件系 ...

  8. thinkphp3.2.3集成腾讯云短信文档流程

    昨天晚上折腾了一个小时没解决 今天折腾了20分钟就搞定了 看了thinkphp3.2.3的命名空间解释方法  把文件放到这里 /ThinkPHP/Library/Org/ 把新建了一个Sms文件夹 把 ...

  9. 关于JWTtoken的管理问题

    JWT简介: Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准.因为网络上有很多关于jwt的详细介绍了,所以我这里就不再赘述.但是JWT的大 ...

  10. C# ADO.NET中设置Like模糊查询的参数

    ADO.NET进行参数化时会自动将参数值包含在单引号中,除了特殊需求,最好不要自己手动添加单引号.ADO.NET中识别参数标识是使用符号@,如果在SQL语句中将参数标识放在单引号中,单引号中的参数标识 ...