{"release":{"tag":{"name":"v2.2.1","path":"/dromara/x-file-storage/tags/v2.2.1","tree_path":"/dromara/x-file-storage/tree/v2.2.1","message":"\u003Ch3 align=\"center\"\u003E\r\n\t\u003Cimg src=\"https://x-file-storage.xuyanwu.cn/assets/logo.svg\" height=\"200px\"  alt=\"logo\"/\u003E\u003Cbr /\u003E\r\n\t\u003Cspan\u003E原名 X Spring File Storage 现已捐赠至 \u003Ca target=\"_blank\" href=\"https://dromara.org/zh\"\u003Edromara\u003C/a\u003E 开源组织\u003C/span\u003E\r\n\u003C/h3\u003E\r\n\u003Cp align=\"center\"\u003E\r\n    \u003Ca target=\"_blank\" href=\"https://x-file-storage.dromara.org\"\u003Ex-file-storage.dromara.org\u003C/a\u003E |\r\n\t\u003Ca target=\"_blank\" href=\"https://x-file-storage.xuyanwu.cn\"\u003Ex-file-storage.xuyanwu.cn\u003C/a\u003E |\r\n\t\u003Ca target=\"_blank\" href=\"https://spring-file-storage.xuyanwu.cn\"\u003Espring-file-storage.xuyanwu.cn\u003C/a\u003E\r\n\u003C/p\u003E\r\n\u003Cp align=\"center\"\u003E\r\n\t\u003Ca target=\"_blank\" href=\"https://central.sonatype.com/search?q=org.dromara.x-file-storage\"\u003E\r\n\t\t\u003Cimg src=\"https://img.shields.io/maven-central/v/org.dromara.x-file-storage/x-file-storage-core.svg?label=Maven%20Central\" /\u003E\r\n\t\u003C/a\u003E\r\n\t\u003Ca target=\"_blank\" href=\"https://www.apache.org/licenses/LICENSE-2.0\"\u003E\r\n\t\t\u003Cimg src=\"https://img.shields.io/badge/license-Apache%202-green.svg\" /\u003E\r\n\t\u003C/a\u003E\r\n\t\u003Ca target=\"_blank\" href=\"https://www.oracle.com/technetwork/java/javase/downloads/index.html\"\u003E\r\n\t\t\u003Cimg src=\"https://img.shields.io/badge/JDK-8+-blue.svg\" /\u003E\r\n\t\u003C/a\u003E\r\n\t\u003Ca target=\"_blank\" href='https://github.com/dromara/x-file-storage'\u003E\r\n\t\t\u003Cimg src=\"https://img.shields.io/github/stars/dromara/x-file-storage.svg?style=social\" alt=\"github star\"/\u003E\r\n\t\u003C/a\u003E\r\n    \u003Ca href='https://gitee.com/dromara/x-file-storage'\u003E\r\n        \u003Cimg src='https://gitee.com/dromara/x-file-storage/badge/star.svg?theme=dark' alt='star' /\u003E\r\n    \u003C/a\u003E\r\n    \u003Cbr /\u003E\r\n    \u003Ca href='https://jq.qq.com/?_wv=1027\u0026k=eGfeNqka'\u003E\r\n        \u003Cimg src='https://img.shields.io/badge/QQ%E7%BE%A4-515706495-orange' alt='' /\u003E\r\n    \u003C/a\u003E\r\n\u003C/p\u003E\r\n\r\n# 📚简介\r\n\r\n一行代码将文件存储到本地、FTP、SFTP、WebDAV、阿里云 OSS、华为云 OBS、七牛云 Kodo、腾讯云 COS、百度云 BOS、又拍云 USS、MinIO、\r\nAmazon S3、GoogleCloud Storage、FastDFS、 Azure Blob Storage、Cloudflare R2、金山云 KS3、美团云 MSS、京东云 OSS、天翼云 OOS、移动 云EOS、沃云 OSS、网易数帆 NOS、Ucloud US3、青云 QingStor、平安云 OBS、首云 OSS、IBM COS、其它兼容 S3 协议的存储平台。查看 [所有支持的存储平台](https://x-file-storage.xuyanwu.cn/#/存储平台)\r\n\r\n💡 通过 WebDAV 连接到 Alist 后，可以使用百度网盘、天翼云盘、阿里云盘、迅雷网盘等常见存储服务，查看 [Alist 支持的存储平台](https://alist-doc.nn.ci/docs/webdav)\r\n\r\n🚚 支持在不同存储平台之间迁移文件，详情查看 [迁移文件](https://x-file-storage.xuyanwu.cn/#/迁移文件)\r\n\r\nGitHub：https://github.com/dromara/x-file-storage\r\nGitee：https://gitee.com/dromara/x-file-storage\r\n\r\n文档1：https://x-file-storage.dromara.org\r\n文档2：https://x-file-storage.xuyanwu.cn\r\n文档3：https://spring-file-storage.xuyanwu.cn\r\n\r\n-------\r\n\r\n# 📜更新内容\r\n\r\n- 修复某些情况下哈希计算错误的问题\r\n- 修复七牛云 Kodo 预签名 URL 无法使用的问题\r\n\r\n-------\r\n\r\n# 📦使用\r\n\r\n点击 [快速入门](https://x-file-storage.xuyanwu.cn/#/快速入门) 查看全部存储平台的使用方法！\r\n\r\n#### 🔧 配置\r\n\r\n这里以阿里云 OSS 为例，`pom.xml` 引入本项目，这里默认是 `SpringBoot` 环境，其它环境参考 [脱离 SpringBoot 单独使用](https://x-file-storage.xuyanwu.cn/#/脱离SpringBoot单独使用)\r\n\r\n```xml\r\n\u003C!-- 引入本项目 --\u003E\r\n\u003Cdependency\u003E\r\n    \u003CgroupId\u003Eorg.dromara.x-file-storage\u003C/groupId\u003E\r\n    \u003CartifactId\u003Ex-file-storage-spring\u003C/artifactId\u003E\r\n    \u003Cversion\u003E2.2.1\u003C/version\u003E\r\n\u003C/dependency\u003E\r\n\u003C!-- 引入 阿里云 OSS SDK，如果使用其它存储平台，就引入对应的 SDK  --\u003E\r\n\u003Cdependency\u003E\r\n    \u003CgroupId\u003Ecom.aliyun.oss\u003C/groupId\u003E\r\n    \u003CartifactId\u003Ealiyun-sdk-oss\u003C/artifactId\u003E\r\n    \u003Cversion\u003E3.16.1\u003C/version\u003E\r\n\u003C/dependency\u003E\r\n```  \r\n\r\n`application.yml` 配置文件中添加以下基础配置\r\n\r\n```yaml\r\ndromara:\r\n  x-file-storage: #文件存储配置\r\n    default-platform: aliyun-oss-1 #默认使用的存储平台\r\n    aliyun-oss:\r\n      - platform: aliyun-oss-1 # 存储平台标识\r\n        enable-storage: true  # 启用存储\r\n        access-key: ??\r\n        secret-key: ??\r\n        end-point: ??\r\n        bucket-name: ??\r\n        domain: ?? # 访问域名，注意“/”结尾，例如：https://abc.oss-cn-shanghai.aliyuncs.com/\r\n        base-path: test/ # 基础路径\r\n```\r\n\r\n#### 🔨编码\r\n\r\n在启动类上加上`@EnableFileStorage`注解\r\n\r\n```java\r\n@EnableFileStorage\r\n@SpringBootApplication\r\npublic class SpringFileStorageTestApplication {\r\n\r\n    public static void main(String[] args) {\r\n        SpringApplication.run(SpringFileStorageTestApplication.class,args);\r\n    }\r\n\r\n}\r\n```\r\n #### ✨开始上传\r\n\r\n 支持 File、MultipartFile、byte[]、InputStream、URL、URI、String、HttpServletRequest，大文件会自动分片上传。如果想支持更多方式，请阅读 [文件适配器](https://x-file-storage.xuyanwu.cn/#/文件适配器) 章节\r\n\r\n```java\r\n@RestController\r\npublic class FileDetailController {\r\n\r\n    @Autowired\r\n    private FileStorageService fileStorageService;//注入实列\r\n\r\n    /**\r\n     * 上传文件\r\n     */\r\n    @PostMapping(\"/upload\")\r\n    public FileInfo upload(MultipartFile file) {\r\n        //只需要这一行代码即可上传成功\r\n        return fileStorageService.of(file).upload();\r\n    }\r\n    \r\n    /**\r\n     * 上传文件，成功返回文件 url\r\n     */\r\n    @PostMapping(\"/upload2\")\r\n    public String upload2(MultipartFile file) {\r\n        FileInfo fileInfo = fileStorageService.of(file)\r\n                .setPath(\"upload/\") //保存到相对路径下，为了方便管理，不需要可以不写\r\n                .setObjectId(\"0\")   //关联对象id，为了方便管理，不需要可以不写\r\n                .setObjectType(\"0\") //关联对象类型，为了方便管理，不需要可以不写\r\n                .putAttr(\"role\",\"admin\") //保存一些属性，可以在切面、保存上传记录、自定义存储平台等地方获取使用，不需要可以不写\r\n                .upload();  //将文件上传到对应地方\r\n        return fileInfo == null ? \"上传失败！\" : fileInfo.getUrl();\r\n    }\r\n\r\n    /**\r\n     * 上传图片，成功返回文件信息\r\n     * 图片处理使用的是 https://github.com/coobird/thumbnailator\r\n     */\r\n    @PostMapping(\"/upload-image\")\r\n    public FileInfo uploadImage(MultipartFile file) {\r\n        return fileStorageService.of(file)\r\n                .image(img -\u003E img.size(1000,1000))  //将图片大小调整到 1000*1000\r\n                .thumbnail(th -\u003E th.size(200,200))  //再生成一张 200*200 的缩略图\r\n                .upload();\r\n    }\r\n\r\n    /**\r\n     * 上传文件到指定存储平台，成功返回文件信息\r\n     */\r\n    @PostMapping(\"/upload-platform\")\r\n    public FileInfo uploadPlatform(MultipartFile file) {\r\n        return fileStorageService.of(file)\r\n                .setPlatform(\"aliyun-oss-1\")    //使用指定的存储平台\r\n                .upload();\r\n    }\r\n\r\n    /**\r\n     * 直接读取 HttpServletRequest 中的文件进行上传，成功返回文件信息\r\n     * 使用这种方式有些注意事项，请查看文档 基础功能-上传 章节\r\n     */\r\n    @PostMapping(\"/upload-request\")\r\n    public FileInfo uploadPlatform(HttpServletRequest request) {\r\n        return fileStorageService.of(request).upload();\r\n    }\r\n}\r\n```\r\n\r\n#### 🎨其它操作\r\n\r\n```java\r\n//手动构造文件信息，可用于其它操作\r\nFileInfo fileInfo = new FileInfo()\r\n        .setPlatform(\"huawei-obs-1\")\r\n        .setBasePath(\"test/\")\r\n        .setPath(\"aa/\")\r\n        .setFilename(\"image.png\")\r\n        .setThFilename(\"image.png.min.jpg\");\r\n\r\n//文件是否存在\r\nboolean exists = fileStorageService.exists(fileInfo);\r\n//下载\r\nbyte[] bytes = fileStorageService.download(fileInfo).bytes();\r\n//删除\r\nfileStorageService.delete(fileInfo);\r\n//其它更多操作\r\n\r\n```\r\n\r\n如果将文件记录保存到数据库中，还可以更方便的根据 URL 进行操作了，详情请阅读 [保存上传记录](https://x-file-storage.xuyanwu.cn/#/基础功能?id=保存上传记录) 章节\r\n\r\n```java\r\n//直接从数据库中获取 FileInfo 对象，更加方便执行其它操作\r\nFileInfo fileInfo = fileStorageService.getFileInfoByUrl(\"https://abc.def.com/test/aa/image.png\");\r\n\r\n//文件是否存在\r\nboolean exists = fileStorageService.exists(\"https://abc.def.com/test/aa/image.png\");\r\n//下载\r\nbyte[] bytes = fileStorageService.download(\"https://abc.def.com/test/aa/image.png\").bytes();\r\n//删除\r\nfileStorageService.delete(\"https://abc.def.com/test/aa/image.png\");\r\n//其它更多操作\r\n```\r\n\r\n点击 [快速入门](https://x-file-storage.xuyanwu.cn/#/快速入门) 查看全部存储平台的使用方法！\r\n\r\n-------","commit":{"id":"7433a5f883d894ef9f0c57dc621cf17627b7d015","short_id":"7433a5f","title":"!49 Release 2.2.1","title_markdown":"\u003Ca title=\"Pull Request: Release 2.2.1\" class=\"gfm gfm-pull_request\" href=\"/dromara/x-file-storage/pulls/49\"\u003E!49\u003C/a\u003ERelease 2.2.1","description":"Merge pull request !49 from 梦想i/dev","description_markdown":"Merge pull request \u003Ca title=\"Pull Request: Release 2.2.1\" class=\"gfm gfm-pull_request\" href=\"/dromara/x-file-storage/pulls/49\"\u003E!49\u003C/a\u003Efrom 梦想i/dev","message":"!49 Release 2.2.1\nMerge pull request !49 from 梦想i/dev","message_markdown":"\u003Ca title=\"Pull Request: Release 2.2.1\" class=\"gfm gfm-pull_request\" href=\"/dromara/x-file-storage/pulls/49\"\u003E!49\u003C/a\u003ERelease 2.2.1\nMerge pull request \u003Ca title=\"Pull Request: Release 2.2.1\" class=\"gfm gfm-pull_request\" href=\"/dromara/x-file-storage/pulls/49\"\u003E!49\u003C/a\u003Efrom 梦想i/dev","detail_path":"/dromara/x-file-storage/commit/7433a5f883d894ef9f0c57dc621cf17627b7d015","commits_path":"/dromara/x-file-storage/commits/7433a5f883d894ef9f0c57dc621cf17627b7d015","tree_path":"/dromara/x-file-storage/tree/7433a5f883d894ef9f0c57dc621cf17627b7d015","author":{"name":"梦想i","email":"1171736840@qq.com","username":"XYW1171736840","user_path":"/XYW1171736840","enterprise_user_path":null,"image_path":"no_portrait.png#梦想i-XYW1171736840","is_gitee_user":true,"is_enterprise_user":null,"widget_url":""},"committer":{"name":"Gitee GPG Bot","email":"noreply@gitee.com","username":"gitee-bot","user_path":"/gitee-bot","enterprise_user_path":null,"image_path":"https://foruda.gitee.com/avatar/1677201213385506226/10186697_gitee-bot_1639518846.png!avatar30","is_gitee_user":true,"is_enterprise_user":null,"widget_url":""},"authored_date":"2024-07-18T05:48:02+00:00","committed_date":"2024-07-18T05:48:02+00:00","signature":null,"build_state":null},"archive_path":"/dromara/x-file-storage/repository/archive/v2.2.1","signature":null},"operating":{"edit":false,"download":true,"destroy":false,"enterprise_forbid_zip":false},"release":{"title":"v2.2.1","path":"/dromara/x-file-storage/releases/tag/v2.2.1","tag_path":"/dromara/x-file-storage/tree/v2.2.1","project_id":16001109,"created_at":"2024-07-18T13:53:08+08:00","is_prerelease":false,"description":"\u003Ch3 align=\"center\"\u003E\r\n\t\u003Cimg src=\"https://x-file-storage.xuyanwu.cn/assets/logo.svg\" height=\"200px\"  alt=\"logo\"/\u003E\u003Cbr /\u003E\r\n\t\u003Cspan\u003E原名 X Spring File Storage 现已捐赠至 \u003Ca target=\"_blank\" href=\"https://dromara.org/zh\"\u003Edromara\u003C/a\u003E 开源组织\u003C/span\u003E\r\n\u003C/h3\u003E\r\n\u003Cp align=\"center\"\u003E\r\n    \u003Ca target=\"_blank\" href=\"https://x-file-storage.dromara.org\"\u003Ex-file-storage.dromara.org\u003C/a\u003E |\r\n\t\u003Ca target=\"_blank\" href=\"https://x-file-storage.xuyanwu.cn\"\u003Ex-file-storage.xuyanwu.cn\u003C/a\u003E |\r\n\t\u003Ca target=\"_blank\" href=\"https://spring-file-storage.xuyanwu.cn\"\u003Espring-file-storage.xuyanwu.cn\u003C/a\u003E\r\n\u003C/p\u003E\r\n\u003Cp align=\"center\"\u003E\r\n\t\u003Ca target=\"_blank\" href=\"https://central.sonatype.com/search?q=org.dromara.x-file-storage\"\u003E\r\n\t\t\u003Cimg src=\"https://img.shields.io/maven-central/v/org.dromara.x-file-storage/x-file-storage-core.svg?label=Maven%20Central\" /\u003E\r\n\t\u003C/a\u003E\r\n\t\u003Ca target=\"_blank\" href=\"https://www.apache.org/licenses/LICENSE-2.0\"\u003E\r\n\t\t\u003Cimg src=\"https://img.shields.io/badge/license-Apache%202-green.svg\" /\u003E\r\n\t\u003C/a\u003E\r\n\t\u003Ca target=\"_blank\" href=\"https://www.oracle.com/technetwork/java/javase/downloads/index.html\"\u003E\r\n\t\t\u003Cimg src=\"https://img.shields.io/badge/JDK-8+-blue.svg\" /\u003E\r\n\t\u003C/a\u003E\r\n\t\u003Ca target=\"_blank\" href='https://github.com/dromara/x-file-storage'\u003E\r\n\t\t\u003Cimg src=\"https://img.shields.io/github/stars/dromara/x-file-storage.svg?style=social\" alt=\"github star\"/\u003E\r\n\t\u003C/a\u003E\r\n    \u003Ca href='https://gitee.com/dromara/x-file-storage'\u003E\r\n        \u003Cimg src='https://gitee.com/dromara/x-file-storage/badge/star.svg?theme=dark' alt='star' /\u003E\r\n    \u003C/a\u003E\r\n    \u003Cbr /\u003E\r\n    \u003Ca href='https://jq.qq.com/?_wv=1027\u0026k=eGfeNqka'\u003E\r\n        \u003Cimg src='https://img.shields.io/badge/QQ%E7%BE%A4-515706495-orange' alt='' /\u003E\r\n    \u003C/a\u003E\r\n\u003C/p\u003E\r\n\r\n# 📚简介\r\n\r\n一行代码将文件存储到本地、FTP、SFTP、WebDAV、阿里云 OSS、华为云 OBS、七牛云 Kodo、腾讯云 COS、百度云 BOS、又拍云 USS、MinIO、\r\nAmazon S3、GoogleCloud Storage、FastDFS、 Azure Blob Storage、Cloudflare R2、金山云 KS3、美团云 MSS、京东云 OSS、天翼云 OOS、移动 云EOS、沃云 OSS、网易数帆 NOS、Ucloud US3、青云 QingStor、平安云 OBS、首云 OSS、IBM COS、其它兼容 S3 协议的存储平台。查看 [所有支持的存储平台](https://x-file-storage.xuyanwu.cn/#/存储平台)\r\n\r\n💡 通过 WebDAV 连接到 Alist 后，可以使用百度网盘、天翼云盘、阿里云盘、迅雷网盘等常见存储服务，查看 [Alist 支持的存储平台](https://alist-doc.nn.ci/docs/webdav)\r\n\r\n🚚 支持在不同存储平台之间迁移文件，详情查看 [迁移文件](https://x-file-storage.xuyanwu.cn/#/迁移文件)\r\n\r\nGitHub：https://github.com/dromara/x-file-storage\r\nGitee：https://gitee.com/dromara/x-file-storage\r\n\r\n文档1：https://x-file-storage.dromara.org\r\n文档2：https://x-file-storage.xuyanwu.cn\r\n文档3：https://spring-file-storage.xuyanwu.cn\r\n\r\n-------\r\n\r\n# 📜更新内容\r\n\r\n- 修复某些情况下哈希计算错误的问题\r\n- 修复七牛云 Kodo 预签名 URL 无法使用的问题\r\n\r\n-------\r\n\r\n# 📦使用\r\n\r\n点击 [快速入门](https://x-file-storage.xuyanwu.cn/#/快速入门) 查看全部存储平台的使用方法！\r\n\r\n#### 🔧 配置\r\n\r\n这里以阿里云 OSS 为例，`pom.xml` 引入本项目，这里默认是 `SpringBoot` 环境，其它环境参考 [脱离 SpringBoot 单独使用](https://x-file-storage.xuyanwu.cn/#/脱离SpringBoot单独使用)\r\n\r\n```xml\r\n\u003C!-- 引入本项目 --\u003E\r\n\u003Cdependency\u003E\r\n    \u003CgroupId\u003Eorg.dromara.x-file-storage\u003C/groupId\u003E\r\n    \u003CartifactId\u003Ex-file-storage-spring\u003C/artifactId\u003E\r\n    \u003Cversion\u003E2.2.1\u003C/version\u003E\r\n\u003C/dependency\u003E\r\n\u003C!-- 引入 阿里云 OSS SDK，如果使用其它存储平台，就引入对应的 SDK  --\u003E\r\n\u003Cdependency\u003E\r\n    \u003CgroupId\u003Ecom.aliyun.oss\u003C/groupId\u003E\r\n    \u003CartifactId\u003Ealiyun-sdk-oss\u003C/artifactId\u003E\r\n    \u003Cversion\u003E3.16.1\u003C/version\u003E\r\n\u003C/dependency\u003E\r\n```  \r\n\r\n`application.yml` 配置文件中添加以下基础配置\r\n\r\n```yaml\r\ndromara:\r\n  x-file-storage: #文件存储配置\r\n    default-platform: aliyun-oss-1 #默认使用的存储平台\r\n    aliyun-oss:\r\n      - platform: aliyun-oss-1 # 存储平台标识\r\n        enable-storage: true  # 启用存储\r\n        access-key: ??\r\n        secret-key: ??\r\n        end-point: ??\r\n        bucket-name: ??\r\n        domain: ?? # 访问域名，注意“/”结尾，例如：https://abc.oss-cn-shanghai.aliyuncs.com/\r\n        base-path: test/ # 基础路径\r\n```\r\n\r\n#### 🔨编码\r\n\r\n在启动类上加上`@EnableFileStorage`注解\r\n\r\n```java\r\n@EnableFileStorage\r\n@SpringBootApplication\r\npublic class SpringFileStorageTestApplication {\r\n\r\n    public static void main(String[] args) {\r\n        SpringApplication.run(SpringFileStorageTestApplication.class,args);\r\n    }\r\n\r\n}\r\n```\r\n #### ✨开始上传\r\n\r\n 支持 File、MultipartFile、byte[]、InputStream、URL、URI、String、HttpServletRequest，大文件会自动分片上传。如果想支持更多方式，请阅读 [文件适配器](https://x-file-storage.xuyanwu.cn/#/文件适配器) 章节\r\n\r\n```java\r\n@RestController\r\npublic class FileDetailController {\r\n\r\n    @Autowired\r\n    private FileStorageService fileStorageService;//注入实列\r\n\r\n    /**\r\n     * 上传文件\r\n     */\r\n    @PostMapping(\"/upload\")\r\n    public FileInfo upload(MultipartFile file) {\r\n        //只需要这一行代码即可上传成功\r\n        return fileStorageService.of(file).upload();\r\n    }\r\n    \r\n    /**\r\n     * 上传文件，成功返回文件 url\r\n     */\r\n    @PostMapping(\"/upload2\")\r\n    public String upload2(MultipartFile file) {\r\n        FileInfo fileInfo = fileStorageService.of(file)\r\n                .setPath(\"upload/\") //保存到相对路径下，为了方便管理，不需要可以不写\r\n                .setObjectId(\"0\")   //关联对象id，为了方便管理，不需要可以不写\r\n                .setObjectType(\"0\") //关联对象类型，为了方便管理，不需要可以不写\r\n                .putAttr(\"role\",\"admin\") //保存一些属性，可以在切面、保存上传记录、自定义存储平台等地方获取使用，不需要可以不写\r\n                .upload();  //将文件上传到对应地方\r\n        return fileInfo == null ? \"上传失败！\" : fileInfo.getUrl();\r\n    }\r\n\r\n    /**\r\n     * 上传图片，成功返回文件信息\r\n     * 图片处理使用的是 https://github.com/coobird/thumbnailator\r\n     */\r\n    @PostMapping(\"/upload-image\")\r\n    public FileInfo uploadImage(MultipartFile file) {\r\n        return fileStorageService.of(file)\r\n                .image(img -\u003E img.size(1000,1000))  //将图片大小调整到 1000*1000\r\n                .thumbnail(th -\u003E th.size(200,200))  //再生成一张 200*200 的缩略图\r\n                .upload();\r\n    }\r\n\r\n    /**\r\n     * 上传文件到指定存储平台，成功返回文件信息\r\n     */\r\n    @PostMapping(\"/upload-platform\")\r\n    public FileInfo uploadPlatform(MultipartFile file) {\r\n        return fileStorageService.of(file)\r\n                .setPlatform(\"aliyun-oss-1\")    //使用指定的存储平台\r\n                .upload();\r\n    }\r\n\r\n    /**\r\n     * 直接读取 HttpServletRequest 中的文件进行上传，成功返回文件信息\r\n     * 使用这种方式有些注意事项，请查看文档 基础功能-上传 章节\r\n     */\r\n    @PostMapping(\"/upload-request\")\r\n    public FileInfo uploadPlatform(HttpServletRequest request) {\r\n        return fileStorageService.of(request).upload();\r\n    }\r\n}\r\n```\r\n\r\n#### 🎨其它操作\r\n\r\n```java\r\n//手动构造文件信息，可用于其它操作\r\nFileInfo fileInfo = new FileInfo()\r\n        .setPlatform(\"huawei-obs-1\")\r\n        .setBasePath(\"test/\")\r\n        .setPath(\"aa/\")\r\n        .setFilename(\"image.png\")\r\n        .setThFilename(\"image.png.min.jpg\");\r\n\r\n//文件是否存在\r\nboolean exists = fileStorageService.exists(fileInfo);\r\n//下载\r\nbyte[] bytes = fileStorageService.download(fileInfo).bytes();\r\n//删除\r\nfileStorageService.delete(fileInfo);\r\n//其它更多操作\r\n\r\n```\r\n\r\n如果将文件记录保存到数据库中，还可以更方便的根据 URL 进行操作了，详情请阅读 [保存上传记录](https://x-file-storage.xuyanwu.cn/#/基础功能?id=保存上传记录) 章节\r\n\r\n```java\r\n//直接从数据库中获取 FileInfo 对象，更加方便执行其它操作\r\nFileInfo fileInfo = fileStorageService.getFileInfoByUrl(\"https://abc.def.com/test/aa/image.png\");\r\n\r\n//文件是否存在\r\nboolean exists = fileStorageService.exists(\"https://abc.def.com/test/aa/image.png\");\r\n//下载\r\nbyte[] bytes = fileStorageService.download(\"https://abc.def.com/test/aa/image.png\").bytes();\r\n//删除\r\nfileStorageService.delete(\"https://abc.def.com/test/aa/image.png\");\r\n//其它更多操作\r\n```\r\n\r\n点击 [快速入门](https://x-file-storage.xuyanwu.cn/#/快速入门) 查看全部存储平台的使用方法！\r\n\r\n-------","author":{"name":"梦想i","username":"XYW1171736840","path":"/XYW1171736840","avatar_url":"no_portrait.png#梦想i-XYW1171736840"},"attach_files":[],"zip_download_url":"/dromara/x-file-storage/releases/tag/v2.2.1.zip","tar_download_url":"/dromara/x-file-storage/releases/tag/v2.2.1.tar.gz"}}}