Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱
MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com

七牛云存储 qiniu 域名 回收 文件上传 备份 下载


目录

背景

七牛云添加自定义域名和域名解析教程

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

也可以通过任意方法处理(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

七牛云存储 qiniu 域名 回收 文件上传 备份 下载 MD的更多相关文章

  1. 七牛云存储Python SDK使用教程 - 上传策略详解

    文 七牛云存储Python SDK使用教程 - 上传策略详解 七牛云存储 python-sdk 七牛云存储教程 jemygraw 2015年01月04日发布 推荐 1 推荐 收藏 2 收藏,2.7k  ...

  2. 使用Python3.7+Tornado5.1配合七牛云存储api来异步切分上传文件

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_123 之前写了几篇关于FastDfs分布式存储的文章:python3.7.3操作FastDfs来进行文件操作,其实市面上关于云存储 ...

  3. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...

  4. 七、springBoot 简单优雅是实现文件上传和下载

    前言 好久没有更新spring Boot 这个项目了.最近看了一下docker 的知识,后期打算将spring boot 和docker 结合起来.刚好最近有一个上传文件的工作呢,刚好就想起这个脚手架 ...

  5. 19、文件上传与下载/JavaMail邮件开发

    回顾: 一. 监听器 生命周期监听器 ServletRequestListener HttpSessionListener ServletContextListener 属性监听器 ServletRe ...

  6. Nginx集群之WCF大文件上传及下载(支持6G传输)

    目录 1       大概思路... 1 2       Nginx集群之WCF大文件上传及下载... 1 3       BasicHttpBinding相关配置解析... 2 4       编写 ...

  7. java实现大文件上传和下载

    [文件上传和下载]是很多系统必备功能, 比如PM\OA\ERP等:系统中常见的开发模式有B/S和C/S,而前者主要是通过浏览器来访问web服务器,一般采用七层协议中的[应用层http]进行数据传输,后 ...

  8. java web学习总结(二十四) -------------------Servlet文件上传和下载的实现

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  9. (转载)JavaWeb学习总结(五十)——文件上传和下载

    源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...

随机推荐

  1. 如何将你的github仓库部署到github pages

    很多时候我都在思考一个问题,我们每天遇到各种各样的问题,然后我们需要不断google.百度,达到我们解决问题的目的.但是在这个过程中,我们总是能够见到,对于同一个问题,总是有大量错误.copy的博客. ...

  2. LOJ.2863.[IOI2018]组合动作(交互)

    题目链接 通过两次可以先确定首字母.然后还剩下\(n-1\)位,之后每一位只有三种可能. 最简单的方法是每次确定一位,通过两次询问显然可以确定.但是只能一次询问. 首字母只会出现一次,即我们可以将串分 ...

  3. BZOJ2465: [中山市选2009]小球

    Description        给定n个不同颜色的球,每个球都有一个分数,同时有m个瓶子,每个瓶子都有固定的容量.现在,你必须把球放到瓶子里面.请编程计算最多能放多少个球到这些瓶子里. Inpu ...

  4. Kruskal 模板

    最小生成树指的是在图上面找到权值最小的一棵树,并且保证图上所有的点都在这棵树上. 解决办法:Kruskal 算法(贪心思想) 将边按权值从小到大排序,然后按这个顺序不断连边,直到所有点联通. /** ...

  5. MySQL分析数据运行状态【SHOW PROCESSLIST】

    这个博文,将只是简单的记录一下,我们的数据库操作和使用中,加索引加不上去,分析的过程,其实比较简单,就是看有没有连接进程还在操作表.有的话,将其停掉(不影响业务的场景下). 今天的主角是: SHOW ...

  6. QNJR-GROUP/EasyTransaction: 依赖于Spring的一个柔性事务实现,包含 TCC事务,补偿事务,基于消息的最终一致性事务,基于消息的最大努力交付事务交付QNJR-GROUP/EasyTransaction: 依赖于Spring的一个柔性事务实现,包含 TCC事务,补偿事务,基于消息的最终一致性事务,基于消息的最大努力交付事务交付

    QNJR-GROUP/EasyTransaction: 依赖于Spring的一个柔性事务实现,包含 TCC事务,补偿事务,基于消息的最终一致性事务,基于消息的最大努力交付事务交付 大规模SOA系统的分 ...

  7. poj-3352-Road Construction-缩点

    做法: 把所有的边双联通分量缩成一个点. 之后建树,然后求出这个树中度为1的点. #include<stdio.h> #include<iostream> #include&l ...

  8. .Net Discovery系列之十二-深入理解平台机制与性能影响(下)

    上一篇文章中Aicken为大家介绍了.Net平台的垃圾回收机制.即时编译机制与其对性能的影响,这一篇中将继续为大家介绍.Net平台的异常捕获机制与字符串驻留机制. 三.关于异常捕获机制 虽然我们已经很 ...

  9. 【IntelliJ IDEA】idea或者JetBrains公司所有编辑器,设置其软件的字体样式

    操作如下: 修改完成后的效果: 可以看到修改以后的ide的效果:

  10. mysql慢查询监控及sql优化

    在my.ini添加如下代码,即可查看那个sql语句执行慢了 log-slow-queries = d:/log/mysql-slow.log long_query_time = 1 打开日志 log ...