项目总结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 ...
随机推荐
- 使用腾讯地图和js,html实现地理位置的获取
转自http://blog.csdn.net/eele_one/article/details/64905218<!DOCTYPE html> <html> <head& ...
- Microsoft Speaker Recognition API
azure说话人识别API 官方文档:https://westus.dev.cognitive.microsoft.com/docs/services/563309b6778daf02acc0a508 ...
- C#6.0新语法
.自动属性初始化的改进(有用) 原来的用法(声明时无法同时初始化),例如: class MyClass { public int Age { get; set; } public string Nam ...
- Vue ElementUI 的使用
简介: 饿了么公司基于vue开的的vue的Ui组件库 1.Element Ui 基于vue pc端的UI框架 2. MintUi 基于vue 移 ...
- flutter 入口文件配置路由+加载页面
入口文件配置路由 1.路由信息 -- 加载页面 ,通常用于显示新的内容或者广告,加载完成之后进入主页面 -- 主页面 /app 2.配置页面 main.dart main.dart // main ...
- WPF 耗时操作时,加载loging 动画 (BackgroundWorker 使用方法)
1.定义一个全局 BackgroundWorker private System.ComponentModel.BackgroundWorker bgMeet0; 2.设置执行耗时的任务为True b ...
- Python笔记:编码问题
1. python2的编码: python2中使用的是ASCII码,所以不支持中文,如果要在python2中写入中文编码,需要在文件头编写: #-*- encoding:utf-8 -*- 2. 不同 ...
- linux 文件描述符
文件描述符是什么?和文件句柄有啥区别?文件描述符是linux/unix操作系统中特有的概念.相当于windows系统中的文件句柄.一个意思不同叫法.Linux系统中, 每当进程打开一个文件时,系统就为 ...
- 全球DDOS安全防护
转:http://www.safecdn.cn/ https://www.safeidc.cn/llqx.html 全球可视化的DDoS攻击地图:Digital Attack Map 这个项目是源于G ...
- Unable to docker login through CLI - unauthorized: incorrect username or password
Unable to docker login through CLI - unauthorized: incorrect username or password To solve it proper ...