广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot+微信小程序实现文件上传与下载功能详解
  • 340
分享到

SpringBoot+微信小程序实现文件上传与下载功能详解

2024-04-02 19:04:59 340人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1、文件上传1.1 后端部分1.2 小程序前端部分1.3 实现效果2、文件下载2.1 后端部分2.2 小程序前端部分2.3 实现效果1、文件上传 1.1 后端部分 1.1.1 引

1、文件上传

1.1 后端部分

1.1.1 引入Apache Commons FIleUpload组件依赖

<!--文件上传与下载相关的依赖-->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.2</version>
</dependency>

1.1.2 设置上传文件大小限制

在application.yml(根据个人情况,有的人可能用的properties)配置文件中添加如下参数:

1.1.3 创建控制器

后端部分很简单,就是实现文件上传而已,这个学过springMVC就行。

@apiOperation("文件上传")
    @PostMapping("/upload")
    public String upload(httpservletRequest request, @RequestParam("file") MultipartFile file) throws IOException {
        if(!file.isEmpty()){
            //上传文件路径
//            String path = request.getServletContext().getRealPath("/uploadFiles/");
            String path="E:/upload";
            //获得上传文件名
            String fileName = file.getOriginalFilename();
            File filePath = new File(path + File.separator + fileName);
            System.out.println(filePath);
            //如果文件目录不存在,创建目录
            if(!filePath.getParentFile().exists()){
                filePath.getParentFile().mkdirs();
            }
            //将上传文件保存到一个目标文件中
            file.transferTo(filePath);
            return "success";
        }
        return "fail";
    }

这里为了方便,我直接使用了绝对路径,生产环境中是不允许的。

1.2 小程序前端部分

wx.uploadFile(OBJECT)接口将本地资源上传到开发者的服务器上,客户端发起一个HttpS的Post请求,其中content-type为multipart/fORM-data。在上传之前需要先获取本地(手机)上的资源,即使用wx.uploadFile(OBJECT)之前应该先调用其他的接口来获取待上传的文件资源,例如先调用wx.chooseImage()接口来获取到本地图片资源的临时文件路径,再通过wx.uploadFile(OBJECT)接口将本地资源上传到指定服务器。wx.uploadFile()接口属性如下表所示。

官网示例代码:

wx.chooseImage({
  success (res) {
    const tempFilePaths = res.tempFilePaths
    wx.uploadFile({
      url: 'https://example.weixin.qq.com/upload', //仅为示例,非真实的接口地址
      filePath: tempFilePaths[0],
      name: 'file',
      formData: {
        'user': 'test'
      },
      success (res){
        const data = res.data
        //do something
      }
    })
  }
})

真实的前端代码如下:

pages/uploadFile/uploadFile.wxml

<!--index.wxml-->
<view class="container">
 <button bindtap='upfile'>选择上传文件</button>
</view>

pages/uploadFile/uploadFile.js

//index.js
//获取应用实例
var app = getApp()
Page({
  data: {
  },
  //事件处理函数
  upfile: function() {
    console.log("--bindViewTap--")

     wx.chooseImage({
       success: function(res) {
       var tempFilePaths = res.tempFilePaths
         wx.uploadFile({
           url: 'http://127.0.0.1:8001/file/upload',
           header: { "Content-Type": "multipart/form-data" },
           filePath: tempFilePaths[0],
           name: 'file',
           formData:{
            
           },
           success(res){
             console.log(res.data);
           }
         })
      }
     })

  },
  onLoad: function () {
  }
})

1.3 实现效果

编译之后:

点击上传文件,随便选择一张图片

可以看到,前端和后端项目的控制台都有对应的输出。

然后去对应的路径下面查找我们刚刚上传的文件

2、文件下载

2.1 后端部分

这里依赖和设置上传文件大小和上传部分一致,不重复了。

2.1.1 控制器

 @ApiOperation("文件下载")
    @GetMapping("download")
    public ResponseEntity<byte[]> download(HttpServletRequest request,@RequestParam("file") String fileName) throws IOException {
        //下载文件路径
        String path="E:/upload";
        //构建将要下载的文件对象
        File file = new File(path + File.separator + fileName);
        //设置响应头
        HttpHeaders headers=new HttpHeaders();
        //下载显示的文件名,解决中文名称乱码问题
        String downloadFileName=new String(fileName.getBytes("UTF-8"),"ISO-8859-1");
        //通知浏览器以下载方式(attachment)打开文件
        headers.setContentDispositionFormData("attachment",downloadFileName);
        //定义以二进制流数据(最常见的文件下载)的形式下载返回文件数据
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        //使用spring mvc框架的ResponseEntity对象封装返回下载数据
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.OK);
    }

2.2 小程序前端部分

wx.downloadFile(Object object)下载文件资源到本地(手机).客户端直接发起一个HTTPS GET请求,返回文件的本地临时路径。因为是临时路径,也就意味着用户不会直到真实的文件目录,所以下载到临时路径之后应该马上做后续的工作,例如把临时图片设置为头像,或者把临时文件通过别的接口真是保存到手机指定目录下。wx.downloadFile(Object object)参数如表所示。

官网示例代码:

下载的前端代码如下:

这里实现两个功能,一个实现把下载到的图片设置为头像,另一个将图片保存到手机本地。

pages/downloadFile/downloadFile.wxml

<!--index.wxml-->
<view class="container">
  <view  bindtap="dian" class="userinfo">
    <image class="userinfo-avatar" src="{{avatar}}" background-size="cover"></image>
    <text class="userinfo-nickname">{{userInfo.nickName}}</text>
  </view>
  <view class="usermotto">
  <image src='http://127.0.0.1:8001/file/download?file=ymwtyNjpeZq645b1d185a17eaa9a65398443fbc4f8dd.jpg' class="tu"></image>
    <view bindtap='dian2'>下载上图</view>
  </view>
</view>

pages/downloadFile/downloadFile.js

//index.js
//获取应用实例
var app = getApp()
Page({
 
  data: {
    motto: 'Hello World',
    userInfo: {},

    avatar:null
  },
  //事件处理函数
  dian: function() {
    console.log("--bindViewTap--")
    var that = this;
    wx.downloadFile({
      // url: 'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=3018968254,2801372361&fm=26&gp=0.jpg',
      url:'http://127.0.0.1:8001/file/download?file=ymwtyNjpeZq645b1d185a17eaa9a65398443fbc4f8dd.jpg',
       type: 'image',
        success: function(res) {
          console.log(res)
         that.setData({avatar:res.tempFilePath})
          
        }
      })
  },
  onLoad: function () {
    console.log('onLoad')
    var that = this
    //调用应用实例的方法获取全局数据
    app.getUserInfo(function(userInfo){
      //更新数据
      that.setData({
        userInfo:userInfo
      })
    })
  },
  dian2: function () {
    wx.downloadFile({
      url:'http://127.0.0.1:8001/file/download?file=ymwtyNjpeZq645b1d185a17eaa9a65398443fbc4f8dd.jpg',
      success: function (res) {
        console.log(res);
        var rr = res.tempFilePath;
        wx.saveImageToPhotosAlbum({
          filePath: rr,
          success(res) {
            wx.showToast({
              title: '保存成功',
              icon: 'success',
              duration: 2000
            })
          }
        })
      }
    })
  }

})

在函数dian()中调用了wx.downloadFile()接口,下载成功,图片就会保存在res.tempFilePath中,再把res.tempFilePath设置为头像。在函数dian2中,通过wx.saveImageToPhotosAlbum()接口把下载成功的图片保存到系统相册。

2.3 实现效果

这个图片是直接从服务器上下载的,可以点击下载将这个图片保存到本地

到这里,文件上传和下载就基本做完了。其实大多数都是后端的事情,接口写好就没啥大问题。不放心的可以先用swagger测试

所有接口文档均来自官网

以上就是SpringBoot+微信小程序实现文件上传与下载功能详解的详细内容,更多关于SpringBoot 小程序文件上传下载的资料请关注编程网其它相关文章!

--结束END--

本文标题: SpringBoot+微信小程序实现文件上传与下载功能详解

本文链接: https://www.lsjlt.com/news/143282.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot+微信小程序实现文件上传与下载功能详解
    目录1、文件上传1.1 后端部分1.2 小程序前端部分1.3 实现效果2、文件下载2.1 后端部分2.2 小程序前端部分2.3 实现效果1、文件上传 1.1 后端部分 1.1.1 引...
    99+
    2022-11-13
  • SpringBoot+微信小程序如何实现文件上传与下载功能
    这篇文章主要介绍SpringBoot+微信小程序如何实现文件上传与下载功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、文件上传1.1 后端部分1.1 引入Apache Commons FIleUpload组件依...
    99+
    2023-06-29
  • SpringBoot文件上传与下载功能实现详解
    目录前言1、引入Apache Commons FileUpload组件依赖2、设置上传文件大小限制3、创建选择文件视图页面4、创建控制器5、创建文件下载视图页面前言 文件上传与下载是...
    99+
    2022-11-13
    SpringBoot文件上传 SpringBoot文件下载
  • SpringBoot实现文件上传下载功能小结
    最近做的一个项目涉及到文件上传与下载。前端上传采用百度webUploader插件。有关该插件的使用方法还在研究中,日后整理再记录。本文主要介绍SpringBoot后台对文件上传与下载的处理。单文件上传// 单文件上传@RequestMapp...
    99+
    2023-05-31
    spring boot 文件上传
  • 使用微信小程序实现文件上传功能
    标题:使用微信小程序实现文件上传功能随着微信小程序的兴起,越来越多的企业和开发者开始利用微信小程序为用户提供便捷的服务。在很多情况下,用户需要上传文件。如果能够在微信小程序中实现文件上传功能,将会极大地提升用户体验。本文将介绍如何使用微信小...
    99+
    2023-11-21
    功能 文件上传 微信小程序
  • SpringBoot怎么实现文件上传与下载功能
    这篇“SpringBoot怎么实现文件上传与下载功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot怎么实...
    99+
    2023-07-06
  • SpringBoot如何实现文件上传与下载功能
    今天小编给大家分享一下SpringBoot如何实现文件上传与下载功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Sprin...
    99+
    2023-07-02
  • 微信小程序如何实现文件上传、下载操作
    这篇文章将为大家详细讲解有关微信小程序如何实现文件上传、下载操作,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:前面介绍了微信小程序登录API与获取用户信息操作。...
    99+
    2022-10-19
  • 微信小程序开发文件上传功能怎么实现
    这篇文章主要介绍了微信小程序开发文件上传功能怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序开发文件上传功能怎么实现文章都会有所收获,下面我们一起来看看吧。保存图片,我认为有两处需要保存&nbs...
    99+
    2023-06-26
  • 微信小程序实现上传图片小功能
    本文实例为大家分享了微信小程序实现上传图片的具体代码,供大家参考,具体内容如下 用到的apiwx.chooseMedia(); 用于拍摄或从手机相册中选择图片或视频 功能:点击上传图...
    99+
    2022-11-13
  • 微信小程序实现图片上传功能
    微信小程序实现图片上传功能随着移动互联网的发展,微信小程序已经成为了人们生活中不可或缺的一部分。微信小程序不仅提供了丰富的应用场景,还支持开发者自定义功能,其中包括图片上传功能。本文将介绍如何在微信小程序中实现图片上传功能,并提供具体的代码...
    99+
    2023-11-21
    微信小程序 图片上传 功能实现
  • 微信小程序实现上传视频功能
    本文实例为大家分享了微信小程序上传视频,供大家参考,具体内容如下 微信开发者工具需要安装ffmpeg环境才能正常使用下面的官方方法。 1、调用官方提供的方法(wx.chooseMed...
    99+
    2022-11-13
  • servlet实现文件上传与下载功能
    本文实例为大家分享了servlet实现文件上传与下载的具体代码,供大家参考,具体内容如下 内容 我们分两大模块来进行讲解,即上传的实现,与下载的实现 上传的实现 注意了我们在写上传表...
    99+
    2022-11-11
  • Java+Selenium实现文件上传下载功能详解
    目录简介上传文件下载文件简介 本文主要讲解java代码如何利用selenium操作浏览器上传和下载文件代码教程。 上传文件 常见的 web 页面的上传,一般使用 input 标签或是...
    99+
    2023-01-09
    Java Selenium文件上传下载 Java Selenium文件上传 Java Selenium文件下载 Java Selenium 上传 下载
  • 微信小程序实现页面导航与传参功能详解
    目录一、页面导航概述分类声明式导航导航到tabBar页面导航到非tabBar页面后退导航编程式导航导航到tabBar页面导航到非tabBar页面后退导航导航传参声明式导航传参编程式导...
    99+
    2022-11-13
    微信小程序页面导航 微信小程序传参
  • SpringBoot实现文件上传与下载功能的示例代码
    目录Spring Boot文件上传与下载举例说明1.引入Apache Commons FileUpload组件依赖2.设置上传文件大小限制3.创建选择文件视图页面4.创建控制器5.创...
    99+
    2022-11-13
  • 微信小程序如何实现下拉加载与上拉刷新功能
    这篇文章主要介绍微信小程序如何实现下拉加载与上拉刷新功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!微信小程序下拉刷新上拉加载的两种实现方法实现效果图:方法一:onPullDown...
    99+
    2022-10-19
  • 微信小程序实现上传图片的功能
    本文实例为大家分享了微信小程序实现上传图片的具体代码,供大家参考,具体内容如下 效果图 WXML <view class="img-wrap"> <vie...
    99+
    2022-11-12
  • uniapp实现h5、app与微信小程序三端pdf文件下载和预览功能
    以下代码兼容三端,app,h5,微信小程序,经过个人测试 手机端有两种方法,使用renderjs或者uniapp的api 两者的区别 使用renderjs的写法,会提示用户是否下载文...
    99+
    2022-12-09
    uniapp pdf预览 uniapp pdf 微信小程序实现pdf文件下载预览
  • 微信小程序uploadFile接口实现文件上传
    目录写在前面创建前端页面写入js事件-完成上传操作配置后端php接口文件实现上传功能完善上传功能写在前面 上节中我们讲到小程序的request请求,掌握了基本的网络请求方式,这节我们...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作