基于七牛云上传,下载文件

2024-08-30 07:52
文章标签 下载 上传 七牛云

本文主要是介绍基于七牛云上传,下载文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

准备工作

1.创建一个七牛云账号

2.登录账号,进入个人中心,创建一组密钥(ak和sk)

3. 创建一个公有的存储空间(桶)

注:存储地区的选择基于你的用户的分布主要在哪里。

七牛云直接白送10GB给我们玩,很适合做项目想白嫖的小伙伴。

实战演练 

Java SDK_SDK 下载_对象存储 - 七牛开发者中心(这里的代码仅供参考)

1.springboot项目中导入必要的依赖

        <!--        七牛云--><dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>[7.13.0, 7.13.99]</version></dependency><!--        gson,上传文件时要用--><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.5</version><scope>compile</scope></dependency><!--        @ConfigurationProperties注解爆红--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>

2.yml文件中填入ak,sk和桶的相关配置

qiniu:accessKey: z3214mq2xG5w7-KHQk7oBiJC6sbjrjmlVNai0saisecretKey: _wys_Vf2RWpZqG9Hnlq32lQ17wvULnHeJSIjnGezbucket: gmgx2024prefixUrl: http://siz0shti6.jl-cnm.clouddn.com/

 prefixUrl在这

3.写一个QiniuConfig来接收这些配置

@ConfigurationProperties(prefix = "qiniu")
@Data
@Component
public class QiniuConfig {private String accessKey;private String secretKey;private String bucket;private String prefixUrl;
}

4.编写上传文件的核心代码

为什么只有上传?因为这个桶是公有的,只需要上传时把返回的url存到数据库中,要下载文件时输入url即可下载。(最后介绍私有桶的上传和下载)

 控制器

@Tag(name="文件控制器",description = "基于七牛云实现文件上传和下载")
@RestController
@RequestMapping("file")
public class FileController {@Autowiredprivate FileService fileService;@Operation(summary = "uploadFile",description = "基于七牛云上传文件")@PostMapping("/uploadFile")public Result uploadFile(MultipartFile file){String url = fileService.upload(file);if(url!=null){return new Result(Code.UPLOAD_SUCCESS,"文件上传成功",url);}return new Result(Code.UPLOAD_FAIL,"文件上传失败",null);}}

服务类

package com.example.qiniufileupload.service.impl;
import com.example.qiniufileupload.config.QiniuConfig;
import com.example.qiniufileupload.service.FileService;
import com.google.gson.Gson;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.UUID;@Service
public class FileServiceImpl implements FileService {@Autowiredprivate QiniuConfig qiniuConfig;/*** * @param file   要上传到七牛云的文件* @return url   上传后的文件的完整url*/public String upload(MultipartFile file) {try {// 获取文件的名字   aaa.jpgString originalFilename = file.getOriginalFilename();//file扩展名 extendFileName    jpgString extendFileName = originalFilename.substring(originalFilename.lastIndexOf("."));// 默认不指定key的情况下,以文件内容的hash值作为文件名 时间日期前缀LocalDate currentDate = LocalDate.now();DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd/");// todo:构建新的文件名    2024/8/29/一个uuid.jpgString key = currentDate.format(formatter) + UUID.randomUUID().toString().replace("-", "") + extendFileName;// 构造一个带指定 Region 对象的配置类Configuration zone = new Configuration(Zone.huanan());//我们刚开始选的是华南地区// 从 MultipartFile 直接获取输入流,避免先保存到本地再上传InputStream inputStream = file.getInputStream();//创建Auth对象,填写ak和skAuth auth = Auth.create(qiniuConfig.getAccessKey(), qiniuConfig.getSecretKey());//获得上传凭证String upToken = auth.uploadToken(qiniuConfig.getBucket());System.out.println(upToken);//z3214mq2xG5w7-KHQk7oBiJC6zojrjmlVNcn0sai:oHRCCHPiB2YlJxxCYtDyVOb3lCs=:eyJzY29wZSI6ImdtZ3gyMDI0IiwiZGVhZGxpbmUiOjE3MjQ5Mjc2NjN9//隐藏了判空条件try (InputStream ignored = inputStream){UploadManager uploadManager = new UploadManager(zone);//指定zone//上传图片到七牛云Response response = uploadManager.put(inputStream, key, upToken,null,null);/*** 用gson将浏览器响应的body字符串解析成DefaultPutRet的实例化对象*                                     ↓*          public final class DefaultPutRet {*              public String hash;*              public String key;//在七牛云存储空间中的名字**              public DefaultPutRet() {*              }*          }**/DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);String url = "";url = qiniuConfig.getPrefixUrl() + putRet.key;return url;} catch (IOException ex) {return null;}} catch (Exception e) {return null;}}}

5.用knife4j测试一下

首先随便找一张图片(bushi)

在knife4j的界面中选择这个文件并上传

拿到返回的url地址

 在七牛云中我们保存的文件夹中看到了我们刚上传的图片

使用情景

做需要上传文件的相关业务时,我们可以把上传成功后文件的url保存到数据库中,在需要时直接查数据库获取文件的url,在前端做对应的回显即可。

*************************************************************************

私有桶的上传和下载

1.创建一个私有桶

2.修改相关配置

3.编写上传和下载的核心代码

控制器

@Tag(name="文件控制器",description = "基于七牛云实现文件上传和下载")
@RestController
@RequestMapping("file")
public class FileController {@Autowiredprivate FileService fileService;@Operation(summary = "uploadFile",description = "基于七牛云上传文件")@PostMapping("/uploadFile")public Result uploadFile(MultipartFile file){String url = fileService.upload(file);if(url!=null){return new Result(Code.UPLOAD_SUCCESS,"文件上传成功",url);}return new Result(Code.UPLOAD_FAIL,"文件上传失败",null);}@Operation(summary = "downloadFile",description = "基于七牛云下载文件")@PostMapping("/downloadFile/{fileName}")public Result downloadFile(@PathVariable String fileName){String url = fileService.download(fileName);if(url!=null){return new Result(Code.DOWNLOAD_SUCCESS,"文件下载成功",url);}return new Result(Code.DOWNLOAD_FAIL,"文件下载失败",null);}}

服务类

@Service
public class FileServiceImpl implements FileService {@Autowiredprivate QiniuConfig qiniuConfig;/**** @param file   要上传到七牛云的文件* @return url   上传后的文件的完整url*/public String upload(MultipartFile file) {try {// 获取文件的名字   aaa.jpgString originalFilename = file.getOriginalFilename();//file扩展名 extendFileName    jpgString extendFileName = originalFilename.substring(originalFilename.lastIndexOf("."));String key =  UUID.randomUUID().toString().replace("-", "") + extendFileName;// 构造一个带指定 Region 对象的配置类Configuration zone = new Configuration(Zone.huanan());//我们刚开始选的是华南地区// 从 MultipartFile 直接获取输入流,避免先保存到本地再上传InputStream inputStream = file.getInputStream();//创建Auth对象,填写ak和skAuth auth = Auth.create(qiniuConfig.getAccessKey(), qiniuConfig.getSecretKey());//获得上传凭证String upToken = auth.uploadToken(qiniuConfig.getBucket());System.out.println(upToken);//z3214mq2xG5w7-KHQk7oBiJC6zojrjmlVNcn0sai:oHRCCHPiB2YlJxxCYtDyVOb3lCs=:eyJzY29wZSI6ImdtZ3gyMDI0IiwiZGVhZGxpbmUiOjE3MjQ5Mjc2NjN9//隐藏了判空条件try (InputStream ignored = inputStream){UploadManager uploadManager = new UploadManager(zone);//指定zone//上传图片到七牛云Response response = uploadManager.put(inputStream, key, upToken,null,null);DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);String url = "";url = qiniuConfig.getPrefixUrl() + putRet.key;return url;} catch (IOException ex) {return null;}} catch (Exception e) {return null;}}@Overridepublic String download(String fileName) {String urlString = "";try {// domain   下载 domain, eg: qiniu.com【必须】// useHttps 是否使用 https【必须】// key      下载资源在七牛云存储的 key【必须】String domain = qiniuConfig.getPrefixUrl();//todo 需要修改domainDownloadUrl url = new DownloadUrl(domain, qiniuConfig.getUseHttps(), fileName);// 带有效期long expireInSeconds = 60;long deadline = System.currentTimeMillis() / 1000 + expireInSeconds;Auth auth = Auth.create(qiniuConfig.getAccessKey(), qiniuConfig.getSecretKey());urlString = url.buildURL(auth, deadline);System.out.println(urlString);} catch (Exception e) {e.printStackTrace();}return urlString;}}

4.测试

 注意这里的url的格式,带上了过期时间和token

 

这篇关于基于七牛云上传,下载文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120229

相关文章

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

2. 下载rknn-toolkit2项目

官网链接: https://github.com/airockchip/rknn-toolkit2 安装好git:[[1. Git的安装]] 下载项目: git clone https://github.com/airockchip/rknn-toolkit2.git 或者直接去github下载压缩文件,解压即可。

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-

前端form表单+ifarme方式实现大文件下载

// main.jsimport Vue from 'vue';import App from './App.vue';import { downloadTokenFile } from '@/path/to/your/function'; // 替换为您的函数路径// 将 downloadTokenFile 添加到 Vue 原型上Vue.prototype.$downloadTokenF

【干货分享】基于SSM的体育场管理系统的开题报告(附源码下载地址)

中秋送好礼 中秋佳节将至,祝福大家中秋快乐,阖家幸福。本期免费分享毕业设计作品:《基于SSM的体育场管理系统》。 基于SSM的体育场管理系统的开题报告 一、课题背景与意义 随着全民健身理念的深入人心,体育场已成为广大师生和社区居民进行体育锻炼的重要场所。然而,传统的体育场管理方式存在诸多问题,如资源分配不均、预约流程繁琐、数据统计不准确等,严重影响了体育场的使用效率和用户体验。

在SSH的基础上使用jquery.uploadify.js上传文件

在SSH框架的基础上,使用jquery.uploadify.js实现文件的上传,之前搞了好几天,都上传不了, 在Action那边File接收到的总是为null, 为了这个还上网搜了好多相关的信息,但都不行,最后还是搜到一篇文章帮助到我了,希望能帮助到为之困扰的人。 jsp页面的关键代码: <link rel="stylesheet" type="text/css" href="${page

Tomcat下载压缩包解压后应有如下文件结构

1、bin:存放启动和关闭Tomcat的命令的路径。 2、conf:存放Tomcat的配置,所有的Tomcat的配置都在该路径下设置。 3、lib:存放Tomcat服务器的核心类库(JAR文件),如果需要扩展Tomcat功能,也可将第三方类库复制到该路径下。 4、logs:这是一个空路径,该路径用于保存Tomcat每次运行后产生的日志。 5、temp:保存Web应用运行过程中生成的临时文件

下载/保存/读取 文件,并转成流输出

最近对文件的操作又熟悉了下;现在记载下来:学习在于 坚持!!!不以细小而不为。 实现的是:文件的下载、文件的保存到SD卡、文件的读取输出String 类型、最后是文件转换成流输出;一整套够用了; 重点: 1:   操作网络要记得开线程; 2:更新网络获取的数据 切记用Handler机制; 3:注意代码的可读性(这里面只是保存到SD卡,在项目中切记要对SD卡的有无做判断,然后再获取路径!)

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

Vue3上传图片报错:Current request is not a multipart request

当你看到错误 "Current request is not a multipart request" 时,这通常意味着你的服务器或后端代码期望接收一个 multipart/form-data 类型的请求,但实际上并没有收到这样的请求。在使用 <el-upload> 组件时,如果你已经设置了 http-request 属性来自定义上传行为,并且遇到了这个错误,可能是因为你在发送请求时没有正确地设置