当前位置: 首页 > news >正文

项目总结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;
    }
}

 

转载于:https://www.cnblogs.com/wobuchifanqie/p/10600380.html

相关文章:

  • 04C++const增强、枚举的增强
  • 阿里云API、SDK和CLI应用实践方案
  • 带你开发类似Pokemon Go的AR游戏
  • Ubuntu18.04安装netstat
  • 「实战篇」开源项目docker化运维部署-搭建mysql集群(四)
  • 同城艺龙code
  • main.js中封装全局登录函数
  • Greenplum 5.16.0初探
  • Gym - 100920E 2010-2011 OpenCup IX Onsite, II Yandex Summer School E.Paint 状压DP
  • 第三章:回收方法区
  • Kubernetes Ingress 日志分析与监控的最佳实践
  • MAYA安装未完成,某些产品无法安装的解决方法
  • DB
  • Java的新项目学成在线笔记-day7(三)
  • MySQL优化技巧
  • 【css3】浏览器内核及其兼容性
  • android图片蒙层
  • js中的正则表达式入门
  • MQ框架的比较
  • PermissionScope Swift4 兼容问题
  • Python学习笔记 字符串拼接
  • 闭包--闭包作用之保存(一)
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 简单基于spring的redis配置(单机和集群模式)
  • 七牛云假注销小指南
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • zabbix3.2监控linux磁盘IO
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # Maven错误Error executing Maven
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (4)Elastix图像配准:3D图像
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (k8s中)docker netty OOM问题记录
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (附源码)计算机毕业设计ssm电影分享网站
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (一)Linux+Windows下安装ffmpeg
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET : 在VS2008中计算代码度量值
  • .NET Core WebAPI中封装Swagger配置
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET Standard 的管理策略
  • .net 托管代码与非托管代码
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .sdf和.msp文件读取
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题