SpringBoot+Vue+PDF上传和预览(图解超详细)

参考自:https://www.bilibili.com/video/BV1ei4y1M7Kf 这个教程。
首先创建一个新的项目:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

除了这几个关键的地方,一路next就行了。

开始编写代码,先创建一个FileUploadController
对于代码,需要有以下知识

@RestController
的作用,https://www.cnblogs.com/yaqee/p/11256047.html
@PostMapping的作用:也就是映射一个post请求,https://blog.csdn.net/nangeali/article/details/82470201

format(new Date())的意思是 也就是格式化一个新的时间
Date会创建一个时间,然后会按照当前的sdf格式调用format将当前时间创建出来 直接调用new Date()可能会出现这种格式
Sun Feb 28 10:55:06 CST 2021 再是getServletContext 和getRealPath
https://blog.csdn.net/yasi_xi/article/details/22184331

UUID.randomUUID().toString()
用java生成不重复的字符串https://blog.csdn.net/qq_37126357/article/details/100889753

代码如下:

package com.example.file_updown;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@RestController
public class FileUploadController {
    //然后是用日期来进行文件分配
    //这个格式,等下改一下试试看
    SimpleDateFormat sdf = new SimpleDateFormat("/yyyy/MM/dd/");

    @PostMapping("/upload")
    public Map<String, Object> fileupload(MultipartFile file, HttpServletRequest req) {
        //首先要给文件找一个目录
        //先写返回值
        Map<String, Object> result = new HashMap<>();
        //再用pdf格式开始书写,先找原始的名字
        String originName = file.getOriginalFilename();
        //判断文件类型是不是pdf
        if(!originName.endsWith(".pdf")){
            //如果不是的话,就返回类型
            result.put("status","error");
            result.put("msg","文件类型不对");
            return result;
        }
        //如果是正确的话,就需要写保存文件的文件夹
        //.format(new Date())的意思是 也就是格式化一个新的时间
        //Date会创建一个时间,然后会按照当前的sdf格式调用format将当前时间创建出来 直接调用new Date()可能会出现这种格式
        //Sun Feb 28 10:55:06 CST 2021
        //再是getServletContext
        String format=sdf.format(new Date());
        //这也是一个临时的路径,项目重启之后,他就会变的
        String realPath = req.getServletContext().getRealPath("/") +format;
        //再是保存文件的文件夹
        File folder = new File(realPath);
        //如果不存在,就自己创建
        if(!folder.exists()){
            folder.mkdirs();
        }
        String newName = UUID.randomUUID().toString() + ".pdf";

        //然后就可以保存了
        try {
            file.transferTo(new File(folder,newName));
            //这个还有一个url
           String url= req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+format+newName;
            //如果指向成功了
            result.put("status","success");
            result.put("url",url);
        } catch (IOException e) {
            //返回异常
            result.put("status","error");
            result.put("msg",e.getMessage());
        }
        return  result;
    }
}

启动项目之后
在这里插入图片描述
先使用Postman 测试一下
用图片测试:
在这里插入图片描述
用PDF测试:
在这里插入图片描述
报了这个错
主要是文件太大,所以需要进行修改
在这里插入图片描述
这里100MB可能还是会小,要么选更大的,要么选小一点的pdf.
在这里插入图片描述
这样就行了,这个链接也是可以从浏览器这边复制读取到。
再开始写前端
在这个地方
https://element.eleme.cn/#/zh-CN/component/upload
在这里插入图片描述
复制下面的代码

<el-upload
  class="upload-demo"
  action="https://jsonplaceholder.typicode.com/posts/"
  :on-preview="handlePreview"
  :on-remove="handleRemove"
  :before-remove="beforeRemove"
  multiple
  :limit="3"
  :on-exceed="handleExceed"
  :file-list="fileList">
  <el-button size="small" type="primary">点击上传</el-button>
  <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
</el-upload>

再static文件夹下创建index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
</head>
<body>
<div id="app">
    <el-upload
            action="/upload"
            :on-preview="handlePreview"
            accept=".pdf"
            :limit="10">
        <el-button size="small" type="primary">点击上传</el-button>
        <div slot="tip" class="el-upload__tip">只能上传pdf文件,且不超过500kb</div>
    </el-upload>
</div>
<!-- import Vue before Element-->
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<!--import JavaScript -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script>
new Vue({
    el:'#app',
    methods:{
        handlePreview(file){
            window.open(file.response.url);
        }
    }
})
</script>
</body>
</html>

在这里插入图片描述

  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在Spring Boot和Vue项目中实现PDF在线预览可以通过集成pdf.js库来实现。首先,您需要从官网下载pdf.js源码,并将其放入您的项目中。具体步骤如下: 1. 在官方网站下载pdf.js源码。 2. 将下载的源码放入您的Spring Boot项目中的某个目录中。 3. 打开viewer.html文件,您会注意到它会自动跳转到一个pdf文件。这个pdf文件是官方的示例文件。 4. 如果您只想打开一个特定的pdf文件,只需将官方示例文件替换为您自己的pdf文件。 5. 在viewer.js文件中搜索"defaultUrl",大约在第3500行左右。您可以找到类似上述代码的部分(注意:不同版本的pdf.js可能会略有差异)。 6. 只需更改"value"的值,即可实现预览您指定的pdf文件。 7. 如果您需要根据前端传递的不同值来响应不同的pdf文件,可以使用动态获取的方式来实现。 另外,如果希望使用浏览器自带的预览pdf功能,可以参考使用pdf.js的实现方式。但需要注意的是,某些浏览器可能不支持此功能,如360浏览器。您可以在我的博客中找到有关使用浏览器预览pdf的更多信息。 综上所述,您可以根据以上步骤在Spring Boot和Vue项目中实现PDF在线预览。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [springboot+vue整合pdf.js实现预览pdf](https://blog.csdn.net/qq_14853853/article/details/111176085)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值