上传图片的存储服务器用的是阿里云的OSS,这不是广告。买的是40G/一年的试用版,9块钱。
首先要搞清楚OSS几个专业术语:
1、AccessKeyId和AccessKeySecret都是在下图中箭头所指位置点进去获取到的,这个是业务key,不能透露。
2、bucketName新建的bucket的名字
3、objectKey就是文件在OSS中取的名字
4、endpoint是“oss-cn-shenzhen.aliyuncs.com”(深圳服务器),不是OSS外网域名
android代码接入过程:
1、去服务器获取上传文件信息
上述的bucketName和objectKey、endpoint最好都这个时候去我们自己的服务器获取下来。
我一开始报bucketName错误,就是因为endpoint填成了OSS外网域名,导致不匹配。
2、去服务器获取签名
遇到异常:Authorization header is invalid.
调了很久都没发现问题,最后在自签名方法中获取signature错误,导致返回null,这是我自己粗心的问题,但是真的浪费了很多时间去查找问题。
OSSCredentialProvider credentialProvider = new OSSCustomSignerCredentialProvider() {
@Override
public String signContent(String s) {
// callback是服务器返回回来的签名内容,这段是http同步请求,代码略
return callback.data.optString("signature");
}
};
3、前两部都完成了那就so easy了,后面调用OSS方法上传就是了。
参考: