实现视频和图片的上传,并将相关上传后的地址保存到数据库中

@[TOC] 实现视频和图片的上传

个人学习笔记

实现代码如下:

  • 我的文件目录结构
    在这里插入图片描述

  • 路由 router upload.js

const express = require('express')
const router = express.Router()
// 导入multer 和path 
const multer = require('multer')
const path = require('path')

// 创建multer实例对象,通过dest属性指定文件的存放路径
const uploads = multer({dest: path.join(__dirname, '../temp_upload')})
const uploadHandle = require('../router_handle/upload')
// 上传模块
router.post('/upload', uploads.array('upload',12),uploadHandle.upload)


module.exports = router
  • 处理函数模块 router_handle upload.js
const fs = require('fs')
const moment = require('moment')
const path = require('path')
// 引入 数据库
const db = require('../db/config')
exports.upload = (req, res) => {
    const info = req.body
    const files = req.files
    // 存放新的图片/视频路径
    var fileList = []
    // 视频文件格式
    let fileType = ["avi", "wmv", "mpg", "mpeg", "mov", "rm", "ram", "swf", "flv", "mp4", "mp3", "wma", "avi", "rm", "rmvb", "flv", "mpg", "mkv"]
    // 常用的图片格式
    let imgType = ['jpg','png','jpeg','gif','webp','bmp','tif']
    for (item in files) {
        var file = files[item]
        // console.log(file)
        // 得到上传图片/视频类型
        var type = file.originalname.split('.')[1]
        // 设置需要给图片/视频新的名字
        var ttt = moment().format("YYYYMMDDHHmmss")
        var ran = parseInt(Math.random() * 89999 + 10000)
        var newName = ttt + ran
        if (fileType.indexOf(type) !== -1) {
            // 选择移动视频的新路径
            var newpath = path.join(process.cwd(), "/upload/video/" + newName + "." + type)
            // 移动视频并修改视频名字
            fs.renameSync(file.path, newpath)
        } else if (imgType.indexOf(type) !== -1) {
            // 选择移动图片的新路径
            var newpath = path.join(process.cwd(), "/upload/images/" + newName + "." + type)
            // 移动图片并修改图片名字
            fs.renameSync(file.path, newpath)
        } else {
            return res.cc('上传文件格式不正确')
        }
        file.path = newName
        fileList.push(newpath)
    }
    // 将图片或者视频地址存储到数据库中
    // 判断上传文件是否是视频文件
    if (fileType.indexOf(type) !== -1) {
        // 定义sql语句
        const videoSql = `select video from patient where id = ?`
        db.query(videoSql, info.id, (err, result) => {
            if (err) return res.cc(err)
            if (result.length !== 1) return res.cc('查询失败')
            // 存储视频地址
            // 定义sql语句
            const vInserSql = `update patient set video = ?`
            // p判断将存储字段是否为null
            if (!result[0].video) {
                db.query(vInserSql, JSON.stringify(fileList), (err, result) => {
                    if (err) return res.cc(err)
                    return res.cc('视频上传成功')
                })
            } else if (JSON.parse(result[0].video).length > 0) {
                // 获取已存储的地址
                const sqlData = JSON.parse(result[0].video)
                // 遍历新上传的视频
                for (let i = 0; i < fileList.length; i++) {
                    let item = fileList[i]
                    // 将数据添加到数组中
                    sqlData.unshift(item)
                }
                // 执行sql 语句将最新地址更新存储到数据库当中
                db.query(vInserSql, JSON.stringify(sqlData), (err, result) => {
                    if (err) return res.cc(err)
                    res.send('video insert ok')
                })
            }

        })

    } else if (imgType.indexOf(type) !== -1){
        // 上传图片
        const imgSql = `select picture from patient where id = ?`
        db.query(imgSql, info.id, (err, result) => {
            if (err) return res.cc(err)
            if (result.length !== 1) return res.cc('查询失败')
            // 查询成功之后
            // 存储图片地址
            // 定义存储sql语句
            const pInsertSql = `update patient set picture = ?`
            if (!result[0].picture) {
                db.query(pInsertSql, JSON.stringify(fileList), (err, result) => {
                    if (err) return res.cc(err)
                    return res.cc('图片上传成功', 200)
                })
            } else if (JSON.parse(result[0].picture.length)) {
                // 数据库中图片的地址
                const sqlData = JSON.parse(result[0].picture)
                // 遍历新的图片地址
                for (let i = 0; i < fileList.length; i++) {
                    const item = fileList[i]
                    sqlData.unshift(item)
                }
                db.query(pInsertSql, JSON.stringify(sqlData), (err, result) => {
                    if (err) return res.cc(err)
                    res.cc('image update ok', 200)
                })

            }
        })

    } else {
        res.cc('上传文件格式不正确,请重新上传!!!')
    }
}


结果如下:

  • 数据库
    在这里插入图片描述
  • 移动后的结果
    在这里插入图片描述
  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以为您解答这个问题。 首先,您需要在您的 Spring Boot 项目引入相关依赖,如下所示: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> ``` 接下来,您需要编写一个控制器来处理文件上传的请求和保存文件地址数据库的操作,如下所示: ```java @RestController public class FileUploadController { @Autowired private ImageRepository imageRepository; @PostMapping("/upload") public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) { String fileName = StringUtils.cleanPath(file.getOriginalFilename()); try { if (fileName.contains("..")) { throw new FileStorageException("Invalid file name: " + fileName); } Image image = new Image(); image.setName(fileName); image.setType(file.getContentType()); image.setData(file.getBytes()); imageRepository.save(image); return ResponseEntity.ok().body("File uploaded successfully: " + fileName); } catch (IOException ex) { throw new FileStorageException("Could not store file " + fileName + ". Please try again!", ex); } } } ``` 在上面的控制器,我们使用了 `MultipartFile` 类型的参数来接收文件上传请求,同时也使用了 `ImageRepository` 来保存文件地址数据库。 最后,您需要编写一个 JPA 实体类来映射数据库的 Image 表,如下所示: ```java @Entity @Table(name = "image") public class Image { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name") private String name; @Column(name = "type") private String type; @Lob @Column(name = "data") private byte[] data; // getter 和 setter 方法略 } ``` 在上面的实体类,我们使用了 `@Lob` 注解来将文件内容以二进制形式保存数据库。 至此,您就完成了 Spring Boot 框架实现图片上传显示并保存地址数据库的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值