国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot整合Hutool實現(xiàn)文件上傳下載

這篇具有很好參考價值的文章主要介紹了SpringBoot整合Hutool實現(xiàn)文件上傳下載。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

我相信我們在日常開發(fā)中,難免會遇到對各種媒體文件的操作,由于業(yè)務(wù)需求的不同對文件操作的代碼實現(xiàn)也大不相同

數(shù)據(jù)庫設(shè)計

/*
 Navicat Premium Data Transfer

 Source Server         : MySQL 5.5
 Source Server Type    : MySQL
 Source Server Version : 50554 (5.5.54)
 Source Host           : localhost:3306
 Source Schema         : tgadmin

 Target Server Type    : MySQL
 Target Server Version : 50554 (5.5.54)
 File Encoding         : 65001

 Date: 20/06/2023 03:07:47
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for sys_file
-- ----------------------------
DROP TABLE IF EXISTS `sys_file`;
CREATE TABLE `sys_file`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '文件id',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件名',
  `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件類型',
  `size` bigint(20) NULL DEFAULT NULL COMMENT '文件大小(kb)',
  `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '訪問路徑',
  `location` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件地址',
  `download` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '下載地址',
  `md5` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件md5',
  `is_Delete` tinyint(1) NULL DEFAULT 0 COMMENT '是否刪除 0:未刪除 1:刪除',
  `enable` tinyint(1) NULL DEFAULT 1 COMMENT '是否禁用鏈接  1:可用  0:禁用用',
  `upload_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上傳時間',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uni_md5`(`md5`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 64 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '文件表' ROW_FORMAT = Compact;

SET FOREIGN_KEY_CHECKS = 1;

yaml配置我們的上傳路徑

# 文件上傳配置
files:
  ip: localhost
  upload:
    location: file:F:/項目/SpringBoot+vue/tg-admin/server/files/
    path: /img/**

上傳

maven配置

<!--        hutool-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.15</version>
        </dependency>
<!--        MybatisPlus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>

文件類

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.sql.Timestamp;

/**
 * @Program: admin
 * @ClassName File
 * @Author: liutao
 * @Description: 文件
 * @Create: 2023-03-16 18:51
 * @Version 1.0
 **/

@Data
@TableName("sys_file")
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("文件表")
public class Files implements Serializable {
    private static final long serialVersionUID = 1L;

    @ApiModelProperty("文件id")
    @TableId(type = IdType.AUTO)
    private Integer id;

    @ApiModelProperty("文件名稱")
    private String name;

    @ApiModelProperty("文件類型")
    private String type;

    @ApiModelProperty("文件大小")
    private Long size;

    @ApiModelProperty("文件地址")
    private String location;

    @ApiModelProperty("訪問url")
    private String url;

    @ApiModelProperty("開啟狀態(tài)")
    private String download;

    @ApiModelProperty("是否刪除")
    private Boolean isDelete;

    @ApiModelProperty("文件md5")
    private String md5;

    @ApiModelProperty("開啟狀態(tài)")
    private Boolean enable;

    @ApiModelProperty("上傳時間")
    private Timestamp uploadTime;
}

文件接口?

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tg.admin.common.Result;
import com.tg.admin.entity.Files;
import com.tg.admin.entity.User;
import com.tg.admin.service.FileService;
import com.tg.admin.utils.JwtUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;

/**
 * @Program: admin
 * @ClassName: FileController
 * @Author: liutao
 * @Description: 文件處理
 * @Create: 2023-03-16 18:15
 * @Version 1.0
 **/
@Api(tags = "文件接口")
@RestController
@RequestMapping("/file")
public class FileController {
    private static final Logger log = LoggerFactory.getLogger(FileController.class);
    @Value("${files.ip}")
    private String ip;
    @Value("${server.port}")
    private String port;
    @Value("${files.upload.path}")
    private String path;
    @Value("${files.upload.location}")
    private String fileUploadPath;

    @Autowired
    private FileService fileService;

    @ApiOperation("分頁查詢所有文件信息")
    @GetMapping("/page")
    public Result<Files> findPage(@RequestParam Integer pageNum,
                                  @RequestParam Integer pageSize,
                                  @RequestParam String name,
                                  @RequestParam String type) {
        IPage<Files> page = new Page<>(pageNum, pageSize);
        QueryWrapper<Files> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("is_Delete", false);
        if (!"".equals(name)) {
            queryWrapper.like("name", name);
        }
        if (!"".equals(type)) {
            queryWrapper.like("type", type);
        }
        User currentUser = JwtUtil.getCurrentUser();
        log.info("當前用戶------{}", currentUser);
        return Result.success(fileService.page(page, queryWrapper));
    }


    @ApiOperation("根據(jù)id刪除文件")
    @DeleteMapping("/{id}")
    public Result<Files> delete(@PathVariable Integer id) {
        Files files = fileService.getById(id);
        files.setIsDelete(true);
        fileService.updateById(files);
        return Result.success();
    }


    @ApiOperation("根據(jù)id批量刪除文件")
    @PostMapping("del/batch")
    public Result<Files> deleteBatch(@RequestBody List<Integer> ids) {
        QueryWrapper<Files> queryWrapper = new QueryWrapper<Files>();
        queryWrapper.in("id", ids);
        List<Files> files = fileService.list(queryWrapper);
        files.forEach(file -> {
            file.setIsDelete(true);
            fileService.updateById(file);
        });
        return Result.success();
    }

    @ApiOperation(value = "更新或新增", httpMethod = "POST")
    @PostMapping("/update")
    public Result<Files> save(@RequestBody Files files) {
        return Result.success(fileService.saveOrUpdate(files));
    }


    /**
     * @MethodName: upload
     * @description: 文件上傳
     * @Author: LiuTao
     * @Param: [file]
     * @UpdateTime: 2023/3/16 18:39
     * @Return: java.lang.String
     * @Throw: IOException
     **/
    @ApiOperation("上傳文件接口")
    @PostMapping("/upload")
    public Result<Files> upload(@RequestParam MultipartFile file,
                                HttpServletRequest request) throws IOException {
        // 文件原始名
        String originalFilename = file.getOriginalFilename();
        // 文件類型
        String type = FileUtil.extName(originalFilename);
        // 文件大小
        long size = file.getSize();
        String today = DateUtil.today().replace("-", "/");
        // 定義一個文件唯一的標識碼
        String fileUUID = IdUtil.fastSimpleUUID() + StrUtil.DOT + type;
        // 下載地址
        String download = request.getScheme() + "://" + ip + ":" + port + "/file/" + fileUUID;
        // 重命名文件
        fileUploadPath = fileUploadPath.replace("file:", "");
        path = path.replace("**", "") + today + StrUtil.C_SLASH;
        // 判斷目錄是否存在。不存在就創(chuàng)建
        if (!FileUtil.exist(fileUploadPath + today)) {
            FileUtil.mkdir(fileUploadPath + today);
        }
        // 上傳的文件
        File uploadFile = new File(fileUploadPath + today + StrUtil.C_SLASH + fileUUID);
        System.out.println(fileUploadPath);
        // 文件存入磁盤
        file.transferTo(uploadFile);
        // 獲取文件md5
        String md5 = SecureUtil.md5(uploadFile);
        // 查詢數(shù)據(jù)庫有沒有當前md5
        Files one = getFileMd5(md5);
        String url;
        if (one != null) {
            uploadFile.delete();
            return Result.waring("文件重復(fù)", one.getUrl());
        } else {
            url = request.getScheme() + "://" + ip + ":" + port + path + fileUUID;
        }
        // 存入數(shù)據(jù)庫
        Files saveFile = new Files();
        saveFile.setName(originalFilename);
        saveFile.setType(type);
        saveFile.setSize(size / 1024);
        saveFile.setLocation(uploadFile.getCanonicalPath());
        saveFile.setUrl(url);
        saveFile.setDownload(download);
        saveFile.setMd5(md5);
        fileService.save(saveFile);
        return Result.success(url);
    }

    @ApiOperation("下載文件接口")
    @GetMapping("/{fileUUID}")
    public void download(@PathVariable String fileUUID,
                         HttpServletResponse response) throws IOException {
        Files one = fileService
                .lambdaQuery()
                .like(Files::getLocation, fileUUID)
                .one();
        File uploadFile = new File(one.getLocation());
        ServletOutputStream outputStream = response.getOutputStream();
        response.addHeader("Content-Disposition", "attachment;filename =" + URLEncoder.encode(fileUUID, "UTF-8"));
        response.setContentType("application/octet-stream");
        byte[] bytes = FileUtil.readBytes(uploadFile);
        outputStream.write(bytes);
        outputStream.flush();
        outputStream.close();
    }

    private Files getFileMd5(String md5) {
        QueryWrapper<Files> wrapper = new QueryWrapper<>();
        wrapper.eq("md5", md5);
        List<Files> list = fileService.list(wrapper);
        return list.size() == 0 ? null : list.get(0);
    }
}

配置靜態(tài)資源映射文章來源地址http://www.zghlxwxcb.cn/news/detail-783268.html

    @Value("${files.upload.path}")
    private String filePath;
    @Value("${files.upload.location}")
    private String fileLocation;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //注冊配置類,使用addResourceHandlers方法,將本地路徑fileLocation映射到filePath路由上。
        registry.addResourceHandler(filePath).addResourceLocations(fileLocation);
        WebMvcConfigurer.super.addResourceHandlers(registry);
    }

到了這里,關(guān)于SpringBoot整合Hutool實現(xiàn)文件上傳下載的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 調(diào)用hutool包調(diào)用http接口處理文件流-文件的上傳下載工具類

    hutool工具類get請求獲取流: InputStream inputStream = HttpRequest.get(fileUrl).execute().bodyStream(); hutool工具類post請求上傳文件流: String resp = HttpRequest.post(url).header(Header.CONTENT_TYPE.getValue(), ContentType.MULTIPART.getValue()).form(params).execute().body(); 完成代碼

    2024年01月17日
    瀏覽(27)
  • SpringBoot 如何實現(xiàn)文件上傳和下載

    SpringBoot 如何實現(xiàn)文件上傳和下載

    當今Web應(yīng)用程序通常需要支持文件上傳和下載功能,Spring Boot提供了簡單且易于使用的方式來實現(xiàn)這些功能。在本篇文章中,我們將介紹Spring Boot如何實現(xiàn)文件上傳和下載,同時提供相應(yīng)的代碼示例。 Spring Boot提供了Multipart文件上傳的支持。Multipart是HTTP協(xié)議中的一種方式,用

    2024年02月15日
    瀏覽(39)
  • SpringBoot+MinIO 實現(xiàn)文件上傳、讀取、下載、刪除

    一、 MinIO 二、 MinIO安裝和啟動 三、 pom.xml 四、 applicatin.properties(配置文件) 五、 編寫Java業(yè)務(wù)類

    2024年02月09日
    瀏覽(43)
  • springboot+微信小程序?qū)崿F(xiàn)文件上傳下載(預(yù)覽)pdf文件

    實現(xiàn)思路: 選擇文件 wx.chooseMessageFile ,官方文檔: https://developers.weixin.qq.com/miniprogram/d e v/api/media/image/wx.chooseMessageFile.html 上傳文件 `wx,uploadFile` , 官方文檔:https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/wx.uploadFile.html 查看所有上傳的pdf文件,顯示在頁面上 點擊pdf文件

    2024年02月08日
    瀏覽(96)
  • Springboot + MySQL + html 實現(xiàn)文件的上傳、存儲、下載、刪除

    Springboot + MySQL + html 實現(xiàn)文件的上傳、存儲、下載、刪除

    實現(xiàn)步驟及效果呈現(xiàn)如下: 1.創(chuàng)建數(shù)據(jù)庫表: 表名:file_test 存儲后的數(shù)據(jù): 2.創(chuàng)建數(shù)據(jù)庫表對應(yīng)映射的實體類: 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日
    瀏覽(28)
  • SpringBoot實現(xiàn)文件上傳和下載筆記分享(提供Gitee源碼)

    前言:這邊匯總了一下目前SpringBoot項目當中常見文件上傳和下載的功能,一共三種常見的下載方式和一種上傳方式,特此做一個筆記分享。 目錄 一、pom依賴 二、yml配置文件 三、文件下載

    2024年02月11日
    瀏覽(26)
  • 一張圖帶你學(xué)會入門級別的SpringBoot實現(xiàn)文件上傳、下載功能

    一張圖帶你學(xué)會入門級別的SpringBoot實現(xiàn)文件上傳、下載功能

    ?????作者名稱:DaenCode ??作者簡介:啥技術(shù)都喜歡搗鼓搗鼓,喜歡分享技術(shù)、經(jīng)驗、生活。 ??人生感悟:嘗盡人生百味,方知世間冷暖。 ??所屬專欄:SpringBoot實戰(zhàn) 標題 一文帶你學(xué)會使用SpringBoot+Avue實現(xiàn)短信通知功能(含重要文件代碼) 一張思維導(dǎo)圖帶你學(xué)會Springboot創(chuàng)

    2024年02月12日
    瀏覽(117)
  • 基于SpringBoot實現(xiàn)文件上傳和下載(詳細講解And附完整代碼)

    目錄 一、基于SpringBoot實現(xiàn)文件上傳和下載基于理論 二、詳細操作步驟 文件上傳步驟: 文件下載步驟: 三、前后端交互原理解釋? 四、小結(jié)? 博主介紹:?專注于前后端領(lǐng)域開發(fā)的優(yōu)質(zhì)創(chuàng)作者、秉著互聯(lián)網(wǎng)精神開源貢獻精神,答疑解惑、堅持優(yōu)質(zhì)作品共享。本人是掘金/騰訊

    2024年04月11日
    瀏覽(116)
  • 【java】java實現(xiàn)大文件的分片上傳與下載(springboot+vue3)

    【java】java實現(xiàn)大文件的分片上傳與下載(springboot+vue3)

    源碼: https://gitee.com/gaode-8/big-file-upload 演示視頻 https://www.bilibili.com/video/BV1CA411f7np/?vd_source=1fe29350b37642fa583f709b9ae44b35 對于超大文件上傳我們可能遇到以下問題 ? 大文件直接上傳,占用過多內(nèi)存,可能導(dǎo)致內(nèi)存溢出甚至系統(tǒng)崩潰 ? 受網(wǎng)絡(luò)環(huán)境影響,可能導(dǎo)致傳輸中斷,只能重

    2024年02月02日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包