首页 > 其他分享 >Springboot文件上传

Springboot文件上传

时间:2024-04-09 21:00:15浏览次数:25  
标签:文件 String saveFile File file import 上传 Springboot

package com.example.springboot.controller;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.example.springboot.enity.Files;
import com.example.springboot.mapper.FileMapper;
import com.example.springboot.service.UserService;
import jakarta.annotation.Resource;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
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 java.io.File;
import java.io.IOException;
import java.net.URLEncoder;

/**
 * 文件上传相关接口
 */
@RestController
@RequestMapping("/file")
public class FileController {

    @Autowired
    private UserService userService;


    //  将配置文件中的path读入
    @Value("${files.upload.path}")
    private String fileUploadPath;

    @Resource
    private FileMapper fileMapper;

    /**
     * 文件上传接口
     * @param file
     * @return
     * @throws IOException
     */

    @PostMapping("/upload")
    public String upload(MultipartFile file) throws IOException {
        System.out.println("===============fileUpload============");
        System.out.println("==========="+fileUploadPath);
        String originalFilename = file.getOriginalFilename();
        String type = FileUtil.extName(originalFilename);
        long size = file.getSize();
        // 先存储到磁盘
        File uploadParentFile = new File(fileUploadPath);
        // 判断配置的文件目录是否存在,若不存在则创建一个新的文件目录
        if(!uploadParentFile.exists()){
            uploadParentFile.mkdirs();
        }
        //  定义一个文件唯一的标识码
        String uuid = IdUtil.fastSimpleUUID();
        String fileUuid = uuid + StrUtil.DOT + type;
        File uploadFile = new File(fileUploadPath + fileUuid);
        //把获取到的文件存储到磁盘目录去
        file.transferTo(uploadFile);

        String url = "http://localhost:8080/file/" + fileUuid;
        // 存储数据库
        Files saveFile = new Files();
        saveFile.setName(originalFilename);
        saveFile.setType(type);
        saveFile.setSize(size/1024);
        saveFile.setUrl(url);
        fileMapper.insert(saveFile);
        return url;
    }

    /**
     * 文件下载接口   http://localhost:8080/file/{fileUUID}
     * @param fileUUID
     * @param response
     * @throws IOException
     */

    @GetMapping("/{fileUUID}")
    public void download(@PathVariable String fileUUID, HttpServletResponse response) throws IOException {
        System.out.println("============downloadFile===========");
        //根据文件的唯一标识码获取文件
        File uploadFile = new File(fileUploadPath + fileUUID);
        //  设置输出流的格式
        ServletOutputStream os = response.getOutputStream();
        response.addHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(fileUUID,"UTF-8"));
        response.setContentType("application/octet-stream");

        //读取文件的字节流
        os.write(FileUtil.readBytes(uploadFile));
        os.flush();
        os.close();
    }
}

通过localhost:8080/file/upload上传文件
通过localhost:8080/file/+文件序号 下载文件

标签:文件,String,saveFile,File,file,import,上传,Springboot
From: https://www.cnblogs.com/tk203/p/18124806

相关文章

  • 在 VS 中快速定位打开的文件
    快速定位打开的文件在VS中,你可以使用Ctrl+T打开“GoToAll”搜索工具栏,通过搜索关键字轻松打开要找的文件。但是对于某些操作,比如重命名文件,你需要在解决方案资源管理器中找到该文件。使用Ctrl+[,S或使用下面的图标按钮可以快速定位到当前打开的文件:原文链接ht......
  • easyExcel分批导入文件
     原文地址: https://blog.csdn.net/qq_42060055/article/details/116139016 一些关于easyExcel导入文件操作需求:导入大数据量文件其中数据达到万级、十万级,错误文件进行错误单元格标红,可导出修改完继续导入由于数据量多大一次行全部读到内存中可能会导致内存溢出......
  • Bcdboot - Bcd 启动文件创建和修复工具。BCDEDIT - 启动配置数据存储编辑器。
    BCDBOOT/?Bcdboot-Bcd启动文件创建和修复工具。bcdboot.exe命令行工具用于将关键启动文件复制到系统分区以及创建新的系统BCD存储。bcdboot<源>[/l<区域设置>][/s<卷号>[/f<固件>]][/v]         [/vbcd][/m[{OSLoaderID}]][/addlast]......
  • springboot3使用自定义注解+AOP+redis优雅实现防重复提交
     ⛰️个人主页:   蒾酒......
  • WEB漏洞——文件上传
    文章目录任意文件操作一、任意文件上传常见文件上传点概念tips--weshell所需条件上传流程任意文件上传--GETSHELL直接上传二、上传绕过--这里以upload靶场为例子1.绕过JS验证方法1:Burpsuite剔除响应JS方法2:浏览器审计攻击剔除JS方法3:使用浏览器......
  • Spring Boot、Nacos配置文件properties、yml、yaml的优先级
    在标准的SpringBoot应用中,本地配置加载顺序如下:bootstrap.yamlbootstrap.propertiesbootstrap-{profile}.yamlbootstrap-{profile}.propertiesapplication.yamlapplication.propertiesapplication-{profile}.yamlapplication-{profile}.propertiesnacos配置中心共享......
  • 安卓多照片上传
    importandroid.util.Log;importcom.zx.eselected.client.toools.ImageCompressor;importorg.json.JSONException;importorg.json.JSONObject;importjava.io.File;importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;importjava.......
  • 如何删除window10此电脑下的“视频/文档/音乐“等文件夹方法
    按下win+r,输入regedit回车,打开注册表。然后在导航栏里输入HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace2、找到相应的键值进行修改操作:(1)更改【下载】文件夹:{088e3905-0323-4b02-9826-5d99428e115f}(2)更改【图片】......
  • 招投标02-招标文件(标前准备阶段)
    ###################################################前面我们说明了招投标的流程,按照规划内容,本节补齐在标前准备阶段的最后一块:招标文件。01-招投标流程总结详见:https://www.cnblogs.com/hemukg/p/1811211602-招标文件说明在标前准备阶段,招标文件有哪些内容,哪些内容需要注......
  • 【教程】App打包成IPA文件类型的四种方法
     摘要本教程总结了将App应用程序打包为IPA包的四种常用方法,包括Apple推荐的方式、iTunes拖入方法、自动编译脚本和解压改后缀名方法。每种方法都有其特点和适用场景,在实际开发中可以根据需求选择合适的方式进行打包。通过本教程,您将了解到不同打包方式的优缺点,并学会如何利用脚......