项目总结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 ...
随机推荐
- 认识MyBatis-总述
关于mybatis的源码,博客园以及其他平台有了相当多的精美,优秀的解析. 而此次本人的记录通过查阅官方文档,以及实际运行中的代码,来回答有实际意义的问题. 目标:理解MYBATIS.MYBATIS的 ...
- Python通过百度Ai识别图片中的文字
版本:python3.7 工作中有需要识别图片中的汗字,查看了半天大神们的博客,但没找到完全可以用的源码,经过自己的实践,以下源码可以实现: 创建应用 首先你需要登录百度AI,选择文字识别,创建一个应 ...
- C#学习-图解教程(2):访问修饰符(其中两种)
学习内容:C#:学习书籍:图解教程(中文第四版). 目录:第四章 类的基本概念 -----> 4.8 访问修饰符 访问修饰符 从类的内部,任何函数成员都可以使用成员的名称访问类中任意的其他成员. ...
- 记一次深度系统安装至windows系统盘提示挂载为只读模式问题
记一次深度系统安装至windows系统盘提示挂载为只读模式问题 来到新公司新电脑自己要安装deepin,安装的时候没考虑双系统直接装至默认win系统盘,导致deepin启动后提示如下: 提示多个挂载分 ...
- 转:APP开发浅谈-Fiddler抓包详解
原文地址:http://www.luoxudong.com/?p=306 Fiddler抓包工具在APP开发过程中使用非常频繁,对开发者理解HTTP网络传输原理以及分析定位网络方面的问题非常有帮助.今 ...
- MyBatis学习总结-MyBatis快速入门的系列教程
MyBatis学习总结-MyBatis快速入门的系列教程 [MyBatis]MyBatis 使用教程 [MyBatis]MyBatis XML配置 [MyBatis]MyBatis XML映射文件 [ ...
- redis权限认证及登录
找到配置文件 redis.conf 找到 requirepass 字段 去掉注释,改为 requirepass yourpassword 重启redis: service redis rest ...
- 关于对CSS中超链接那部分的设置
a:link{ //正常下的超链接 color:red; //超链接的颜色 text ...
- Webservice 从客户端中检测到有潜在危险的 request.form值[解决方法]
<system.web> <httpRuntime requestValidationMode="2.0" /> <pages validateReq ...
- T4代码生成脚本从添加注释,添加命名空间开始(一款强大的代码生成工具从看懂脚本,到随心所欲的玩弄代码,本文只是T4的冰山一角,博主将不断深入探索并完善该文章)
精通T4脚本要从读懂脚本的关键代码片段开始 1.1. 给类添加注释-->看懂类对应的代码:<#=codeStringGenerator.EntityClassOpening(entity ...