springboot+微信小程序实现文件上传下载(预览)pdf文件

这篇具有很好参考价值的文章主要介绍了springboot+微信小程序实现文件上传下载(预览)pdf文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现思路:

  1. 选择文件 wx.chooseMessageFile ,官方文档: https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.chooseMessageFile.html
  2. 上传文件 `wx,uploadFile` , 官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/wx.uploadFile.html
  3. 查看所有上传的pdf文件,显示在页面上
  4. 点击pdf文件就实现预览

5.1 先下载 wx.downloadFile 官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/network/download/wx.downloadFile.html

5.2 在查看 wx.openDocument 官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.openDocument.html

小程序端wxml

<!--pages/uploadPDF/uploadPDF.wxml-->
<view>
  <view>
    <button type="primary" bindtap="uploadPDF">上传pdf文档</button>
  </view>

  <view style="margin:20% auto;width: 100%;">
    <button bindtap="loadPdfList">加载pdf文档</button>
    <view style="border: 1px solid black;width: 100%;">
      <view wx:if="{{pdfList.length>0}}">
        <view wx:for="{{pdfList}}" style="margin:5px;display: flex;justify-content: center;align-items: center;">
          <text style="text-overflow: ellipsis; word-wrap: break-word;width: 80%;">{{item}}</text>
          <button size="mini" type="warn" data-src="{{item}}" bindtap="lookPDF">查看</button>
        </view>
      </view>

      <view wx:else style="text-align: center;">
        <text>暂无</text>
      </view>

    </view>
  </view>

</view>

小程序端ts

/**
   * 页面的初始数据
   */
  data: {
    //pdf文档
    pdfList: {}
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad() {

  },
  uploadPDF() {
    console.log("uploadPDF")
    wx.chooseMessageFile({
      //最多可以选择的文件数量,最多是0-100
      count: 1,
      //指打开文件的类型
      type: "file",
      success: (res) => {
        let path = res.tempFiles[0].path
        let suffix = path.split(".")[1]
        if (suffix != "pdf") {
          console.log("只能上传pdf的文件")
          return
        }
        wx.uploadFile({
          url: "http://172.16.50.86:8080/upload",
          header: {
            "Content-Type": "multipart/form-data"
          },
          name: "file",
          filePath: path,
          success: (res) => {
            if (res.statusCode == 200) {
              console.log("上传成功")
            } else {
              console.error(res.data)
            }
          }
        })
      }
    })
  },
  //加载pdf列表
  loadPdfList() {
    wx.request({
      url: "http://172.16.50.86:8080/fileList",
      method: "GET",
      success: (res) => {
        this.setData({
          pdfList: res.data
        })
      }
    })
  },
  //查看pdf文档
  lookPDF(e) {
    wx.showLoading({
      title:"加载中...",
      mask:true
    })
    let imgUrl = e.currentTarget.dataset.src
    wx.downloadFile({
      url: "http://172.16.50.86:8080/download?file=" + imgUrl,
      success: (res) => {
        if (res.statusCode === 200) {
          setTimeout(() => {
            wx.openDocument({
              filePath:res.tempFilePath,
              fileType:"pdf"
            })
            wx.showToast({
              title:"加载成功!.",
              icon:"success",
              duration:2000,

            })
            wx.hideLoading()
          }, 1500);
         }

      },fail(){
        wx.hideLoading()
      }
    })
  },

后端

1.1 导入相关的maven依赖

<!--文件上传与下载相关的依赖-->
        <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.2 设置上传文件的大小

spring:
  servlet:
    multipart:
      max-file-size: 5MB # 单个文件大小
      max-request-size: 50MB # 总文件大小Apache Commons FIle Upload

1.3 编写代码文章来源地址https://www.toymoban.com/news/detail-721450.html

package com.demo1.web;

import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

@RestController
public class UploadController {

    /**
     * 文件上传
     *
     * @param request
     * @param file
     * @return
     * @throws IOException
     */
    @PostMapping("/upload")
    @CrossOrigin
    public String upload(HttpServletRequest request, @RequestParam("file") MultipartFile file) throws IOException {

        String parameter = request.getParameter("filePath");
        System.out.println("parameter = " + parameter);

        if (!file.isEmpty()) {
            //上传文件路径
//            String path = request.getServletContext().getRealPath("/uploadFiles/");
            String path = "C:/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 fileName;
        }
        return "fail";
    }

    /**
     * 文件下载
     *
     * @param request
     * @param fileName
     * @return
     * @throws IOException
     */
    @GetMapping("download")
    @CrossOrigin
    public ResponseEntity<byte[]> download(HttpServletRequest request, @RequestParam("file") String fileName) throws IOException {
        //下载文件路径
        String path = "C:/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);
    }

    @GetMapping("/fileList")
    @CrossOrigin
    public List<String> list(HttpServletRequest request) {
        String path = "C:/upload";
        File file = new File(path);

        List<String> arrayList = new LinkedList<>();
        for (String list : file.list()) {
            String str = list;

            String split = list.substring(list.indexOf(".") + 1);
            if (split.equals("pdf")) {
                arrayList.add(list);
            }
        }
        return arrayList;
    }


    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }

}

到了这里,关于springboot+微信小程序实现文件上传下载(预览)pdf文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序中pdf的上传、下载及excel导出

    上传两种方法: 1.用vant weapp组件: 参考:https://blog.csdn.net/weixin_38566069/article/details/110229404 提示:突然冒出一个报错:wx.chooseMessageFile点击很多次后就突然无效了 昨天上传功能在【微信开发工具和移动端】都可以用,早上突然实现了。 查了下是官方给出的解释是: 2023年9月

    2024年02月12日
    浏览(33)
  • SpringBoot 如何实现文件上传和下载

    当今Web应用程序通常需要支持文件上传和下载功能,Spring Boot提供了简单且易于使用的方式来实现这些功能。在本篇文章中,我们将介绍Spring Boot如何实现文件上传和下载,同时提供相应的代码示例。 Spring Boot提供了Multipart文件上传的支持。Multipart是HTTP协议中的一种方式,用

    2024年02月15日
    浏览(25)
  • SpringBoot整合Hutool实现文件上传下载

    我相信我们在日常开发中,难免会遇到对各种媒体文件的操作,由于业务需求的不同对文件操作的代码实现也大不相同 maven配置 文件类 文件接口  配置静态资源映射

    2024年02月02日
    浏览(44)
  • SpringBoot整合Minio实现文件上传、下载

    SpringBoot整合Minio实现文件上传、下载: 1,介绍高性能分布式存储文件服务Minio:Minio是 基于Go语言编写的对象存储服务 , 适合于存储大容量非结构化的数据 ,例如 图片、音频、视频、日志文件、备份数据和容器/虚拟机镜像等 ,而一个对象文件可以是任意大小,从几kb到最

    2024年02月06日
    浏览(33)
  • SpringBoot+MinIO 实现文件上传、读取、下载、删除

    一、 MinIO 二、 MinIO安装和启动 三、 pom.xml 四、 applicatin.properties(配置文件) 五、 编写Java业务类

    2024年02月09日
    浏览(26)
  • Springboot + MySQL + html 实现文件的上传、存储、下载、删除

    实现步骤及效果呈现如下: 1.创建数据库表: 表名:file_test 存储后的数据: 2.创建数据库表对应映射的实体类: import com.baomidou.mybatisplus.annotation.IdType ; import com.baomidou.mybatisplus.annotation. TableField ; import com.baomidou.mybatisplus.annotation. TableId ; import com.baomidou.mybatisplus.annotation. Tab

    2024年04月29日
    浏览(27)
  • SpringBoot实现文件上传和下载笔记分享(提供Gitee源码)

    前言:这边汇总了一下目前SpringBoot项目当中常见文件上传和下载的功能,一共三种常见的下载方式和一种上传方式,特此做一个笔记分享。 目录 一、pom依赖 二、yml配置文件 三、文件下载

    2024年02月11日
    浏览(28)
  • 一张图带你学会入门级别的SpringBoot实现文件上传、下载功能

    🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:SpringBoot实战 标题 一文带你学会使用SpringBoot+Avue实现短信通知功能(含重要文件代码) 一张思维导图带你学会Springboot创

    2024年02月12日
    浏览(59)
  • 基于SpringBoot实现文件上传和下载(详细讲解And附完整代码)

    目录 一、基于SpringBoot实现文件上传和下载基于理论 二、详细操作步骤 文件上传步骤: 文件下载步骤: 三、前后端交互原理解释  四、小结  博主介绍:✌专注于前后端领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯

    2024年04月11日
    浏览(40)
  • 【java】java实现大文件的分片上传与下载(springboot+vue3)

    源码: https://gitee.com/gaode-8/big-file-upload 演示视频 https://www.bilibili.com/video/BV1CA411f7np/?vd_source=1fe29350b37642fa583f709b9ae44b35 对于超大文件上传我们可能遇到以下问题 • 大文件直接上传,占用过多内存,可能导致内存溢出甚至系统崩溃 • 受网络环境影响,可能导致传输中断,只能重

    2024年02月02日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包