七牛云的使用(图片超详讲解)

news2024/12/26 12:26:36

一、为什么要使用七牛云的OSS(对象存储服务)?
在这里插入图片描述

二、七牛云使用:

  1. 登录七牛云官网,注册并认证 (初次认证有30天免费使用权限)
  2. 新建存储空间

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
点击创建的空间名字,进入 空间概括如下:
在这里插入图片描述

  1. 阅读帮助文档,在自己的web应用中 使用七牛云对象存储服务OSS
    头像 存至 七牛云对象存储服务中)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    3.1、主要看 java SDK (SDK就是一系列的jar包,用的时候直接调用jar包中的api即可)
    在这里插入图片描述
    在这里插入图片描述
    3.2、SDK(一系列jar包) 引入方式 选择maven方式, 将SDK——jar包 依赖引入 自己的web项目中即可
    在这里插入图片描述
    在这里插入图片描述3.3、上传文件方式: 服务器直传
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    3.4、复制 数据流上传代码
    在这里插入图片描述3.5、用一个测试类 测试上传功能
    将拷贝的代码复制到 测试类中,导入相应的包(用人家的代码,导入人家七牛云的包)
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
3.6、上传本机一张名为111.jpg的图片到七牛云上

AK,SK,bucket要保密,不能直接在 OSSTest类中写。为了安全要从配置文件汇总读取到他们的值
在这里插入图片描述3.7、OSSTest(主要修改6个地方 + 读取application.xml配置文件)

package com.sangeng;

import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import lombok.Data;
import org.junit.jupiter.api.Test;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.stereotype.Component;

import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

@Component //注解将该类标记为Spring的组件
//测试类所在包名 test 和 启动类所在包名java 一致(都在同一包src下),不需要加配置。如果不一致要加配置(加属性)
//@SpringBootTest(classes = SanGengBlogApplication.class)//指定启动类的字节码
@SpringBootTest
//@ConfigurationProperties 的作用: 让JavaBean中属性值要和配置文件application.xml进行映射
@ConfigurationProperties(prefix = "oss") //从application.xml 配置文件中读取 内容
public class OSSTest {

//    读取的时候,要创建成员变量(变量名要和application.xml文件中的名字一致)
//    并且 成员变量必须创建setter方法,进行自动赋值  (自动读取配置文件赋值)
    private String accessKey;
    private String secretKey;
    private String bucket;

    public void setAccessKey(String accessKey) {
        this.accessKey = accessKey;
    }
    public void setSecretKey(String secretKey) {
        this.secretKey = secretKey;
    }
    public void setBucket(String bucket) {
        this.bucket = bucket;
    }

    @Test
    public void testOss(){

//        注:用七牛云的oss,所以导包的时候 要导入七牛云的包。     用人家的代码,导人家的包 com.qiniu.storage

        //构造一个带指定 Region 对象的配置类
//修改1.Region指定数据存储区域,autoRegion()自动根据七牛云账号找到选的区域(我选的是 华北)
        Configuration cfg = new Configuration(Region.autoRegion());
        cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
//...其他参数参考类注释

        UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传

   注:为了安全起见,AK,SK,bucket存储空间名,都是从application.xml 配置文件中读取到的
修改2.复制七牛云官网-个人中心-密钥管理-  AK和SK
//        String accessKey = "";
//        String secretKey = "";
修改3.创建存储空间的名字 pk-sg-blog
//        String bucket = "";

//默认不指定key的情况下,以文件内容的hash值作为文件名,  比如上传一张图片,名字问hash值生成的名字
//修改4.指定上传文件到oss时,文件的存储名
        String key = null;

        try {
//修改5 注释掉,默认上传 字符串,写我们自己的上传格式(上传图片)
//            byte[] uploadBytes = "hello qiniu cloud".getBytes("utf-8");
//            ByteArrayInputStream byteInputStream=new ByteArrayInputStream(uploadBytes);
//上传文件——图片格式(本机绝对路径)
            InputStream inputStream = new FileInputStream("C:\\Users\\yangguang\\Desktop\\111.jpg");

            Auth auth = Auth.create(accessKey, secretKey);//创建凭证
            String upToken = auth.uploadToken(bucket); //上传凭证

            try {
//修改6 put方法 第一个参数 要放上面 自己定义的 inputStream对象
                Response response = uploadManager.put(inputStream,key,upToken,null, null);
                //解析上传成功的结果
                DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
                System.out.println(putRet.key); //Fo2AVLRHugoNbek6XZ8Uy-DCnuSL
                System.out.println(putRet.hash); //Fo2AVLRHugoNbek6XZ8Uy-DCnuSL hash值就是上传后的图片名字
            } catch (QiniuException ex) {
                Response r = ex.response;
                System.err.println(r.toString());
                try {
                    System.err.println(r.bodyString());
                } catch (QiniuException ex2) {
                    //ignore
                }
            }
        } catch (Exception ex) {
            //ignore  异常类型 改大一点
        }

    }
}

application.xml

oss:
  accessKey: 7R0PVHVZqQ_9ZUc65kwtYzjZhB5DhtMczhS6822g
  secretKey: mTF-oazwPEHvO5FnQXFoWPRXKWjSmvC_55Ysycxb
  bucket: pk-sg-blog

3.8、运行测试类,图片上传成功
在这里插入图片描述
在这里插入图片描述
因为代码没有设置key值
在这里插入图片描述
下面设置key值
在这里插入图片描述
在这里插入图片描述3.9、想创建一个2022目录,目录下放111.png
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/745193.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaCV实现byte[]转RTMP流

需求:通过私有的api我可以不断收到byte[]形式的视频数据,现在我需要处理这些数据,最终推送出RTMP流。 实现:通过管道流将不断收到的byte[]视频数据转化为输入流然后提供给JavaCV的FFmpegFrameGrabber使用,然后通过FFmp…

两种传输层协议TCP和UDP【图解TCP/IP(笔记十二)】

文章目录 两种传输层协议TCP和UDPTCP与UDP区分UDP的特点及其目的TCP的特点及其目的 两种传输层协议TCP和UDP 在TCP/IP中能够实现传输层功能的、具有代表性的协议是TCP和UDP。 ■ TCP TCP是面向连接的、可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排…

【C++】C++11 (2): 右值引用、移动构造、移动赋值和模板的可变参数

一、右值引用和移动语义 C11更新后,容器中增加的新方法有插入接口函数的右值引用版本 这些接口的意义在哪?网上都说它们能提高效率,它们是如何提高效率的? 请看下面的右值引用和移动语义的介绍。另外emplace还涉及模板的可变参…

开发跨平台APP,是用Flutter还是React Native开发框架?

随着移动互联网的飞速发展,对于开发人员而言,如何快速地开发出兼容不同平台(iOS、Android)的应用,成为了一个重要的问题。 跨平台应用程序开发框架的好处: 1. 一个App适用于多个设备; 2. 一个…

问一下路过的大神keil5与keil5mdk 的区别是什么?

从Keil C51都Keil5 MDK,不知不觉已经用了Keil十几年。 虽然现在新增了一些开发环境,不过keil对于老工程师来说,应该是最亲切的了… Keil出过很多个版本,很多人最熟悉的是Keil C51和Keil5 MDK。 我们在做STM32程序开发编译的时候…

Centos7安装SDWebui

Centos7安装SDWebui 1.nvidia显卡驱动安装 #查看显卡编号 lspci | grep -i vga#查询显卡型号 http://pci-ids.ucw.cz/mods/PC/10de?actionhelp?helppci#安装依赖包 yum install kernel-devel gcc -y #查看nouveau是否已禁用,如果有内容说明没有禁用 lsmod | gre…

记录一下2023.2kali的默认密码和修改root用户密码的方法

要水一篇博客了…… 默认登录用户名/密码: kali/kali 切换root用户: sudo su 这时输入的密码是kali 然后就切换到了root用户 输入passwd root 提示修改新密码 根据提示输入两遍新密码就修改了root用户的密码啦 (感觉改不改的其实也……无所…

大华监控前端实时预览(踩坑)

难点在后端,前端主要是文档太少了,前端难点主要是接入摄像头,摄像头接入了,剩下什么对讲、调整方向、变焦之类的就简单了。 大华官网:https://open-icc.dahuatech.com/#/home 1.到官网下载插件或者demo,我是…

Xamarin.Android实现界面自动添加控件

目录 1、背景说明2、效果3、代码3.1、UI代码3.2、实现代码 4、代码下载5、相关知识点5.1、原理说明5.2、其他说明 6、参考资料 1、背景说明 有时需要在APP中动态的添加控件,因此记录下在Xamarin中的实现步骤。 VS2022社区版 2、效果 3、代码 3.1、UI代码 UI的代…

文件块读写

写文件: size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); 功能:以数据块的方式给文件写入内容 参数: :准备写入文件数据的地址ptr : 为 类型,此参数指定写入文件内容的块数据大…

面试官:说说Redis的持久化以及主从同步呗

目录 1、秃顶面试官:今天我们聊了聊redis的主从模式啊~ 2、秃顶面试官:Redis有哪几种方式进行数据的持久化? 3、秃顶面试官:RDB持久化是什么呢?触发机制又是什么呢? 4、秃顶面试官:嗯&#…

海外问卷调查怎么做?要准备什么?

科思创业汇 大家好,这里是科思创业汇,一个轻资产创业孵化平台。赚钱的方式有很多种,我希望在科思创业汇能够给你带来最快乐的那一种! 海外问卷调查业务一直存在。与国内不同,国外有大量的支付问卷资源,所…

一招永久解决github上不去问题,秒开

步骤 进入如下路径,把hosts复制到桌面 在桌面将hosts以记事本方式打开,复制下面内容,退出保存 20.205.243.166 github.com # GitHub Start 140.82.114.4 github.com 199.232.69.194 github.global.ssl.fastly.net # GitHub End3. 将修改好…

S7-200 SMART PLC PID向导详细介绍(如何实现P、PD、PID控制器)

这篇博客主要介绍SMART PLC PID向导的使用,PID控制相关的其它内容请查看专栏系列文章,常用链接如下: SMART PLC PID负压控制(过程量为负数)_负压控制pid控制程序_RXXW_Dor的博客-CSDN博客1、如何实现PID反作用调节? 在有些控制中需要PID反作用调节。例如:在夏天控制空调…

doubletrouble1靶场详解

doubletrouble1靶场复盘 首先扫描到ip后对ip单独一个全面扫描。 nmap -sP 192.168.102.0/24同时扫描一下目录,扫到一个secret,打开看一下。 dirsearch -u http://192.168.102.165发现里面是一个图片,下载到我们kali 中去,因为都…

关于E-PGM+ 烧录器烧录失败的原因分析

最近在调试A96L416方案的一款产品,发现有时候无法烧录成功,当然多数时候你可以通过: 1.多试几次 2.替换烧录线 3. 替换烧录器 予以解决。 但我试了上述方法发现问题依旧,该设备A之前还烧录过,所以我并没有怀疑设…

C#基础学习_集合中对象的排序

C#基础学习_集合中对象的排序 基本数据类型的排序: 集合名.Sort(); //通过Sort方法进行排序,默认按照英文的字母先后顺序集合名.Reverse(); //通过Reverse方法进行排序,按照英文字母倒序进行排列对象类型的元素排序: 因为对象有若干个属性,所以执行排序时应该指定按照哪一…

海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储

文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/131679108 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…

c++方向服务器开发和数据库哪个更好?

选择C方向的服务器开发还是数据库开发,取决于你的兴趣、职业目标以及行业需求。以下是一些考虑因素: 我这里刚好有嵌入式、单片机、plc的资料需要可以私我或在评论区扣个6 服务器开发: 兴趣和技能:如果你对网络编程、分布式系统…

【万字解析】JS逆向由浅到深,3个案例由简到难,由练手到项目解析(代码都附详细注释)

目录 介绍简单案例简单案例二项目实战案例-某查查 介绍 大家好,我是辣条哥! 今天给大家上点难度,不然总觉得辣条哥太菜了!我们今天聊聊JS逆向,首先JS逆向是指对使用JavaScript编写的代码进行逆向工程,以获…