uni-app uni.uploadFile上传图片前后端(java)详解

uni-app uni.uploadFile上传图片前后端(java)详解近日在使用uni.uploadFile上传图片时,碰到后端收到不到文件的问题,网上没有写uni-appjava后端的处理实例,小程序到是有很多,但都是单文件上传,即使是多文件上传,也是采用一个for循环多次调用uploadFile函数,对文件一个一个提交。伪代码如下://微信小程序为例:for(vari=0;i<filePaths.length;i++){…

大家好,又见面了,我是你们的朋友全栈君。

近日在使用uni.uploadFile上传图片时,碰到后端收到不到文件的问题,网上没有写uni-app java后端的处理实例,小程序到是有很多,但都是单文件上传,即使是多文件上传,也是采用一个for循环多次调用uploadFile函数,对文件一个一个提交。伪代码如下:

// 微信小程序为例:
for (var i = 0; i < filePaths.length; i++){
    
    wx.uploadFile({
        url:this.url,    
        filePath:filePaths[i],
        name:'file',
        formData:data,
        header:{"Content-Type": "multipart/form-data"},
        success: (res) =>{
            if (res.data.code == 200){
                console.log('上传成功');
            }
        }
    })
}

uni-app的uni.uploadFile在5+APP支持多文件上传,后端处理多文件上传的时候与单文件上传有些不同之处。

一、单文件上传,首先是前端

uni.uploadFile({
    url:this.url,     // 后端api接口
    filePath: filePaths[0], // uni.chooseImage函数调用后获取的本地文件路劲
    name:'file',     //后端通过'file'获取上传的文件对象
    formData: this.sendDate,
    header:{"Content-Type": "multipart/form-data"},
    success:(res) => {
        if (res.data.code == 200){
            console.log('文件上传成功')
        }
    }
});

后端处理单文件上传比较简单,代码如下:

@RequestMapping("/uploadFile")
public Result uploadFile(HttpServeletRequest request, @RequestParam("file")MultipartFile [] files){
    
    // 这样就可以收到文件了,files.length == 1.
    System.out.println(files.length);

    // 后续操作省略
}

二、多文件上传

前端代码:

// 文件路劲封装
let imgs = this.imageList.map((value, index) => {
    return {
            name: "image" + index, 
            uri: value
        }
});
uni.uploadFile({
    url:this.url, 
    files: imgs,
    formData: this.sendDate,
    header:{"Content-Type": "multipart/form-data"},
    success: (res) => {
        if (res.statusCode === 200) {
            uni.showToast({
                title: "反馈成功!"
            });
        }
    }
})

不一样的地方在于:单文件上传的filePath和name参数没有了,取而代之的是files,官方文档有明确说明

uni-app uni.uploadFile上传图片前后端(java)详解

后端代码:

java后端处理多文件上传时,如果仍用单文件上传的后端代码,files.length总等于0,因为注解@ReqeustParam(”file”)里面的file在前端并没有这样设置并提交。

仔细分析uni-app官方文档对于uni.uploadFile函数的说明,知道该函数发起的请求,Content-type为multipart/form-data,于是便可以从request对象中获取MultipartFile。源码如下:

// 如下代码只保留了主逻辑
@RequestMapping("/uploadFile")
public Result uploadFile(HttpServletRequest request, FormData formData) throws IOException{
		
    CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
		
	
    commonsMultipartResolver.setDefaultEncoding("utf-8");

    if (commonsMultipartResolver.isMultipart(request)){
        MultipartHttpServletRequest mulReq = (MultipartHttpServletRequest) request;
	Map<String, MultipartFile> map = mulReq.getFileMap();
			
        // key为前端的name属性,value为上传的对象(MultipartFile)
        for (Map.Entry<String, MultipartFile> entry : map.entrySet()) {
            // 自己的保存文件逻辑
            saveOrUpdateImageFile(feedback.getId(), entry.getKey(), entry.getValue());
        }  
    }      

    return Result.success();
	
}

以上便是uni-app在5+APP上多文件上传的前后端处理代码,如有其他方法,欢迎留言交流。

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147987.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java面试-面向对象

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 Q1。什么是多态? 多态被简要描述为“一个接口,许多实现”。多态性是能够在不同上下文中为某事物赋予不同含义或用法的一…

    2021年6月23日
    101
  • 基于豆瓣影评数据的文本分析系统【数据爬取+数据清洗+数据库存储+LDA主题挖掘+词云可视化】「建议收藏」

    基于豆瓣影评数据的文本分析系统【数据爬取+数据清洗+数据库存储+LDA主题挖掘+词云可视化】「建议收藏」本分析中很多的工作都是基于评论数据来进行的,比如:滴滴出行的评价数据、租房的评价数据、电影的评论数据等等,从这些语料数据中能够挖掘出来客户群体对于某种事物或者事情的看法,较为常见的工作有:舆情分析、热点挖掘和情感分析。如果想要了解关于文本分类或者是情感分析相关的工作内容,可以阅读我的《数据建模实战》专栏文章,下面是链接信息:…

    2022年5月10日
    39
  • C语言中的移位运算

    C语言中的移位运算移位运算移位运算包括左移和右移左移运算:x&amp;lt;&amp;lt;k:x左移k位,并在右端补零。右移运算:逻辑右移:x&amp;gt;&amp;gt;k:x右移k位,并在左端补零。算术右移:x&amp;gt;&amp;gt;k:x右移k位,并在左端补最高有效位的值。下表为对一个8位参数x的两个不同的值做不同的一位操作得到的结果:操作值参数x[01100011][10010101]x&amp;l

    2022年7月13日
    17
  • 关于php一句话木马

    关于php一句话木马服务器上发现被植了很多木马,而且还让人肆意使用…NND使用方法也很简单,本地提交文件指向提交文件,里面的php代码就会被执行

    2022年5月21日
    29
  • c语言调用循环内部函数,通达信绘图函数调用,通达信调用内部数据[通俗易懂]

    c语言调用循环内部函数,通达信绘图函数调用,通达信调用内部数据[通俗易懂]内容导航:Q1:通达信函数大全使用说明内容来自用户:艳我爱你you软件简介:通达信全部函数及其用法(2011年最新版)(一)行情函数1)HIGH(H)最高价返回该周期最高价.2)LOW(L)最低价返回该周期最低价.3)CLOSE(C)收盘价返回该周期收盘价.4)VOL(V)成交量(手)返回该周期成交量.5)OPEN(O)开盘价返回该周期开…

    2025年6月20日
    3
  • break,continue,return的用法_break continue语句

    break,continue,return的用法_break continue语句1.break:直接结束一个循环,跳出循环体。break以后的循环体中的语句不会继续执行,循环体外面的会执行privatevoidtest(){for(inti=0;i&amp;lt;3;i++){Log.e(TAG,&quot;i=&quot;+i);if(i==1){brea…

    2022年9月12日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号