今日代码大赏 | 本地文件存储

在如今的 Web 应用开发中,文件的上传是一个常见的需求。用户上传头像、文件等,需要一个稳定且易于使用的文件处理机制。虽然如今各种云厂商提供了对象存储服务,但是对于我们初学者来说,还是想要一种无需成本的本地文件存储方法。

今天,我们就来深入了解如何在 SpringBoot 中实现本地文件存储功能。示例代码如下:

import org.springframework.core.io.Resource;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.logging.Logger;

@RestController
public class FileUploadController {

    private static final Logger log = Logger.getLogger(FileUploadController.class.getName());
    private static final Path UPLOAD_DIR = Paths.get("uploads"); // 设置文件上传的目录

    @PostMapping("/upload")
    public ResponseEntity<Result<String>> uploadFile(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return ResponseEntity.badRequest().body(Result.error("文件为空,上传失败"));
        }

        try {
            // 获取文件名
            String fileName = file.getOriginalFilename();
            // 确保上传目录存在
            Files.createDirectories(UPLOAD_DIR);
            
            // 保存文件到服务器的指定目录
            Path targetLocation = UPLOAD_DIR.resolve(fileName);
            Files.copy(file.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);

            // 返回成功的响应
            return ResponseEntity.ok(Result.success("文件上传成功,文件名:" + fileName));
        } catch (IOException e) {
            log.severe("文件上传失败:" + e.getMessage());
            return ResponseEntity.status(500).body(Result.error("文件上传失败,服务器内部错误"));
        }
    }
}

今天的文件上传功能是建立在定义一个 Result 类上,如果你想完整实现文件上传功能,可以参考之前我们分享的 SpringBoot 创建统一结果返回类。可以点击下方文字,直接跳转原文哦!

今日代码大赏 | 统一结果返回类

今天的代码大赏就到这里了。希望通过这篇文章,你能够对在 SpringBoot 中实现本地文件存储功能有一个更深入的理解。

完整代码片段来源于代码小抄,欢迎点击进入小程序阅读!

在线访问:https://www.codecopy.cn/post/wmlc1f

在代码小抄可以看到更多优质代码,也欢迎大家积极分享,可能会获得我们官方的小礼品 🎁~

往期推荐

这个 404 页面,是真的炫酷~

我成功复刻了安卓 6 的彩蛋!

今日代码大赏 | Python 实现归并排序算法

今日代码大赏 | Java 实现二分查找算法

今日代码大赏 | 统一结果返回类

相关推荐

  • 备战四个月,每天学14小时,成了
  • 70k!建议来试试这个前景被低估的新方向!
  • Spring Boot 应用 Docker 化的 8 个最佳实践
  • 4 个 yyds 的 Java 框架!
  • 美团招聘
  • 告别信息过载:大模型驱动的搜索与推荐,精准定位用户需求
  • 直播预告| 智能运维,如何让中小企业数据库管理更高效?
  • 从0到1,聊聊货拉拉如何搭建数据指标体系
  • Meta 如何将缓存一致性提高到 99.99999999
  • QCon全球软件开发大会(北京站)2024 优秀出品人与明星讲师名单揭晓
  • 独立站如何摆脱系统不稳定的“漏洞”?这家企业做到了!
  • 数据库的夏天!2024可信数据库发展大会如约而至,邀请你来!| Q推荐
  • 关于 Tab 与空格之争,暴躁老哥 Linus 又有新指示!
  • Mistral 不相信AGI,开源大模型CEO发出警告,科技带不来“新造的人”
  • 侯毅张勇收购盒马传闻不实;英伟达大跌10%;用于Llama3训练的高质量数据集首次公开!
  • 【每周一课#06】MidJourney 应用实战
  • 中科曙光董事长李国杰院士被证监会立案调查:涉嫌违法炒股
  • 奖金丰厚!KDD Cup 2024 检索增强生成CRAG挑战赛正式启动
  • CVPR 2024 | 知识蒸馏中的Logit标准化:辅助logit-based KD算法稳定涨点
  • Meta提出全新文档级嵌入框架,利用LLM来增强信息检索能力