程序员的资源宝库

网站首页 > gitee 正文

PicGo 七牛 图床 云存储 七牛云图床教程

sanyeah 2024-03-29 17:10:30 gitee 11 ℃ 0 评论

本文地址


目录

目录
  • 目录
  • PicGo 七牛 图床 云存储
    • PicGo 图床工具
      • 介绍
      • 安装支持 Gitee 的插件
    • GitHub/Gitee 配置
      • GitHub
      • Gitee
      • 注意事项
    • 七牛云存储
      • 背景
      • 解决方法
        • 下载 qshell
        • 命令行操作过程
        • 下载文件时的详细配置
      • 在 Android 中上传文件到七牛
        • 配置
        • 工具类
        • 使用案例

PicGo 七牛 图床 云存储

PicGo 图床工具

介绍

  • GitHub
  • 下载应用
  • Awesome-PicGo

一个用于快速上传图片并获取图片 URL 链接的工具

PicGo 本体支持的图床:GitHubSM.MS、七牛图床、腾讯云、阿里云、又拍云、Imgur

本体不再增加默认的图床支持,你可以自行开发第三方图床插件,详见PicGo-Core。

基本功能

  • 支持拖拽图片上传
  • 支持快捷键上传剪贴板里第一张图片
  • Windows 和 macOS 支持右键图片文件通过菜单上传 (v2.1.0+)
  • 上传图片后自动复制链接到剪贴板
  • 支持自定义复制到剪贴板的链接格式
  • 支持修改默认快速上传快捷键
  • 支持插件系统,已有插件支持 Gitee、青云等第三方图床
    • 更多第三方插件以及使用了 PicGo 底层的应用可以在 Awesome-PicGo 找到
  • 支持通过发送 HTTP 请求调用 PicGo 上传(v2.2.0+)

其他

  • FAQ
  • issues
  • 插件讨论区
  • flutter-picgo:PicGo 的手机版(支持 Android 和 iOS )

安装支持 Gitee 的插件

  • Awesome-PicGo
  • picgo-plugin-github-plus

安装插件:

GitHub/Gitee 配置

  • GitHub申请token
  • Gitee申请token

GitHub

申请token

  • 创建公开仓库,一定要勾选公开,否则图片除了你自己就不能被别人访问
  • 点击 GitHub申请token
  • 选择Personal access tokens,然后点击Generate new token
  • 填写一下Note,并勾选repo即可,拉到页面最下方确认提交
  • 创建完成后,即可看到token。这个值要保存下来,因为只能看到一次,上方也给了提示

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

设置

  • 仓库名:baiqiantao/blogPic
  • 分支名:默认填写master
  • 将之前的Token黏贴在这里
  • 存储的路径:会在 repository 下创建一个img/2020/文件夹
  • 自定义路径:一般不需要写,否则路径有问题时直接找不到图片
    • used to insead of https://raw.githubusercontent.com/:owner/:repo/:branch/:path/:filename
    • eg: ${customUrl}/path/filename.jpg

Gitee

步骤和GitHub基本一致

申请访问令牌--私人令牌--记下私人令牌

c5c4468e2a2a8af7bf2721dd089b65cc

注意事项

gitee文件大小有1mb限制, 所以超过1mb的文件无法通过外链获取

GitHub 图床有时能上传,有时上传失败

  • GitHub 图床不支持上传同名文件,如果有同名文件上传,会报错。建议开启 时间戳重命名 避免同名文件。
  • GitHub 服务器和国内 GFW 的问题会导致有时上传成功,有时上传失败,无解。想要稳定请使用付费云存储,如阿里云、腾讯云等,价格也不会贵。

七牛云存储

七牛云添加自定义域名和域名解析教程
MPic:一款支持多种上传方式且自动生成MarkDown链接的图床工具

背景

七牛存储空间配置的测试域名30天后就被回收了,导致我之前上传的资源无法访问,并且去控制台发现也完全无法下载、无法备份,因为七牛我主要是用来作为图床的,这么一来,我之前GitHub、博客、markdown笔记里面引用的图片都全部显示不了了,这真是个巨坑呀!

不过好在还有补救措施,我们可以先想办法把文件恢复,然后转移到其他云服务器中。下面就是恢复文件的教程。

导致这种情况的官方说明详见:测试域名使用规范
其中最狠的是这句话:

每个测试域名生命周期为30个自然日,超过30日系统将自动回收,回收即为域名删除。

解决方法

下载 qshell

去GitHub下载 qshell命令行工具,根据操作系统选择对应的版本。

注意:本工具是一个命令行工具,在Windows下面请先打开命令行终端(CMD),然后输入工具名称执行,不要双击打开,否则会出现闪退现象。

文件名 描述
qshell-windows-x86.exe Windows 32位系统
qshell-windows-x64.exe Windows 64位系统

建议将文件名修改为 qshell,以简化后续命令行时的输入。

命令行操作过程

登录
account 命令简介
例如:qshell account m1** ZM**

列举七牛空间里面的所有文件
listbucket 命令简介
例如:qshell listbucket blog-2018 list.txt

生成的文件格式如下:
blog/180927/1G6FDLDF75.png 19963 FlOF-rOkQrjmTOY9KVDF-uUwZ9mZ 15380564227730302 image/png 0 0

获取list.txt结果的第一列

  • 在linux环境中可以使用cat命令:cat list.txt | awk '{print $1}' >list_final.txt
  • 在windows环境下可以在git自带的终端Git Bush Here使用此命令
  • 你也可以通过任意方法处理(Excel、正则表达式、手动写代码...)

处理后的文件格式例如:blog/180927/1G6FDLDF75.png

批量复制七牛空间中的文件到另一个空间
batchcopy 命令简介
例如:qshell batchcopy blog-2018 blog-2018-copy list_final.txt

从七牛空间下载数据到本地
qdownload 命令简介
例如:qshell qdownload qshell.conf

配置文件 qshell.conf 内容如下:

{
    "dest_dir" : "D:\\七牛文件",
    "bucket" : "blog-2018-copy",
    "cdn_domain" : "phz2kt37i.bkt.clouddn.com"
}

至此,全部文件都下载下来了。

下载文件时的详细配置

{
    "dest_dir" : "D:\\七牛文件",
    "bucket" : "blog-2018-copy",
    "prefix" : "",
    "suffixes" : "",
    "cdn_domain" : "phz2kt37i.bkt.clouddn.com",
    "referer" : "",
    "log_file" : "download.log",
    "log_level" : "info",
    "log_rotate" : 1,
    "log_stdout" : false
}
参数名 描述 可选参数
dest_dir 本地数据备份路径,为全路径 N
bucket 空间名称 N
prefix 只同步指定前缀的文件,默认为空 Y
suffixes 只同步指定后缀的文件,默认为空 Y
cdn_domain 设置下载的CDN域名,默认为空表示从存储源站下载,【该功能默认需要计费】 N
referer 如果CDN域名配置了域名白名单防盗链,需要指定一个允许访问的referer地址 N
log_level 下载日志输出级别,可选值为debug,info,warn,error,默认info Y
log_file 下载日志的输出文件,如果不指定会输出到qshell工作目录下默认的文件中 Y
log_rotate 下载日志文件的切换周期,单位为天,默认为1天即切换到新的下载日志文件 Y
log_stdout 下载日志是否同时输出一份到标准终端,默认为false Y

在 Android 中上传文件到七牛

配置

依赖:

implementation 'com.squareup.okhttp3:okhttp:3.8.0'
implementation 'com.squareup.okio:okio:1.13.0'
implementation 'com.qiniu:qiniu-android-sdk:7.3.12'

权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

工具类

public class QiNiuUtils {
    private static final String ACCESSKEY = "m1**";
    private static final String SECRETKEY = "ZM**";
    private static final String BUCKET_NAME = "temp";//存储空间的名字
    private static final String MAC_NAME = "HmacSHA1";
    private static final String ENCODING = "UTF-8";

    public static void upLoad(File file, String key, Configuration config, UpCompletionHandler handler) {
        String token = QiNiuUtils.getToken();
        new UploadManager(config).put(file, key, token, handler, null);
    }

    //获取Token
    private static String getToken() {
        JSONObject json = new JSONObject();
        long deadline = System.currentTimeMillis() / 1000 + 3600 * 12;
        try {
            json.put("deadline", deadline);
            json.put("scope", BUCKET_NAME);
        } catch (JSONException e) {
            e.printStackTrace();
        }

        String encodedPutPolicy = UrlSafeBase64.encodeToString(json.toString());

        byte[] sign = null;
        try {
            sign = hmacsha1encrypt(encodedPutPolicy, SECRETKEY);
        } catch (Exception e) {
            e.printStackTrace();
        }

        String encodedSign = UrlSafeBase64.encodeToString(sign);
        return ACCESSKEY + ':' + encodedSign + ':' + encodedPutPolicy;
    }

    private static byte[] hmacsha1encrypt(String encryptText, String encryptKey) throws Exception {
        byte[] data = encryptKey.getBytes(ENCODING);
        SecretKeySpec secretKey = new SecretKeySpec(data, MAC_NAME);
        Mac mac = Mac.getInstance(MAC_NAME);
        mac.init(secretKey);
        byte[] text = encryptText.getBytes(ENCODING);
        return mac.doFinal(text);
    }
}

使用案例

Configuration config = new Configuration.Builder().build();
String fileName = file.getName();
QiNiuUtils.upLoad(file, fileName, config, (key, info, response) -> {
   //用户自定义的内容上传完成后处理动作必须实现的方法,建议用户自己处理异常。若未处理,抛出的异常被直接丢弃。
   Log.i("bqt", "文件上传保存名称:" + key); //sms_2018.09.08-16_02_09.txt
   Log.i("bqt", "上传完成返回日志信息:\n" + new Gson().toJson(info));
   Log.i("bqt", "上传完成的响应内容:\n" + response);
});

上传完成返回日志信息:

{
    "duration": 923,
    "host": "upload.qiniup.com",
    "id": "1536393734861932",
    "ip": "111.177.9.136",
    "path": "/",
    "port": 80,
    "reqId": "BwMAAOKFEJb2XVIV",
    "response": {
        "nameValuePairs": {
            "hash": "FhX-pWNc1ThcCCVIryzKZQyRQhsq",
            "key": "sms_2018.09.08-16_02_09.txt"
        }
    },
    "sent": 422819,
    "statusCode": 200,
    "timeStamp": 1536393736,
    "totalSize": 422098,
    "upToken": {
        "accessKey": "m1-qhAIzfk6_rNdWfvf5ngaybQva5CmzHl9-pccg",
        "returnUrl": "",
        "token": "..."
    },
    "xlog": "...",
    "xvia": "vdn-hbxy-tel-1-1"
}

上传完成的响应内容

{
    "hash": "FhX-pWNc1ThcCCVIryzKZQyRQhsq",
    "key": "sms_2018.09.08-16_02_09.txt"
}

2018-11-10

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表