【前言】
觉得前面内容复杂(官方文档就是这样)可以跳过,从demo看起,
接口说明
1 | POST <Fsize><EncodedKey>/mimeType/<EncodedMimeType><Crc32>/x:user-var/<EncodedUserVarVal> |
| 参数名称 | 说明 |
|---|---|
/<Fsize> |
(必填) 文件大小。支持传入 -1 表示文件大小以 http request body 为准。 |
/<EncodedKey> |
如果没有指定则:如果 uptoken.SaveKey 存在则基于 SaveKey 生产 key,否则用 hash 值作 key。EncodedKey 需要经过 base64 编码。具体可以参照:URL 安全的 Base64 编码。 |
/<EncodedMimeType> |
文件的 MIME 类型,默认是 application/octet-stream。 |
/<Crc32> |
文件内容的 crc32 校验值,不指定则不进行校验。 |
Host |
upload.qiniu.com(华东区域加速上传域名) ,不同区域的http 和 https 域名详见不同存储区域对应的上传域名 |
Demo(其实重要的就这几段!)
官方demo[ES5]
1
2
3
4
5
6
7
8
9
10
11
12
13
14function putb64(pic,token){
var pic = "填写你的base64后的字符串";
var url = "http://upload.qiniu.com/putb64/20264"; //非华东空间需要根据注意事项 1 修改上传域名
var xhr = new XMLHttpRequest();
xhr.onreadystatechange=function(){
if (xhr.readyState==4){
console.log('七牛图片名',xhr.responseText)
}
}
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/octet-stream");
xhr.setRequestHeader("Authorization", "UpToken 填写你从服务端获取的上传token");
xhr.send(pic);
}优化demo[es6]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20const uploadBase64 = (base64, token) => {
return new Promise((resolve) => {
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
const {key, error} = JSON.parse(xhr.responseText);
if (key) {
resolve('http://自己的七牛图片库域名' + key);
}
if (error) {
resolve({error});
}
}
};
xhr.open('POST', http://upload.qiniu.com, true);
xhr.setRequestHeader('Content-Type', 'application/octet-stream');
xhr.setRequestHeader('Authorization', 'UpToken ' + token);
xhr.send(base64);
});
};扩展demo[es6]
基于上个demo是传入单个base字符串,这里传入base64数组1
2
3const uploadBase64List = (list, token) => Promise.all(
list.map(base64 => uploadBase64(base64, token))
);
注意事项:
pic把要上传的图片先转换为base64字符串,(从微信获取的base64ios是带有data:image/jgp;base64,前缀需去掉);var url = "http://upload.qiniu.com/putb64/20264";这里的 20264 是图片没经过 base64 处理的原图字节大小。如果不清楚大小就传-1;- key就是文件名,如果不填就返回hash值做为文件名;
xhr.setRequestHeader("Authorization", "UpToken(空格)token");这里的UpToken与后面的字符串保留一个空格。后面跟上服务端给出的上传token字符串;- upload.qiniu.com 上传域名适用于华东空间。华北空间使用 upload-z1.qiniu.com,华南空间使用 upload-z2.qiniu.com,北美空间使用 upload-na0.qiniu.com。