费了半天劲,先说一下遇到的几个坑:
1、cos拼接目录两边要带‘/’ 不然会报签名不匹配
'/picture/'获取签名和文件上传需要使用
2、flutter 热重载 静态变量无法重置需要重启或重新打开应用
3、cos http协议put请求
一、选择图片:
使用插件 image_picker: '^0.4.5'
import 'package:image_picker/image_picker.dart';
ImagePicker.pickImage(source: source);
相机:ImageSource.camera
图库:ImageSource.gallery
选择完后回调:
body: new FutureBuilder(
future: _imageFile,
builder: (BuildContext context, AsyncSnapshot<File> snapshot) {
if (snapshot.connectionState == ConnectionState.done &&
snapshot.data != null &&
_imageFile != null) {
fileList.add(snapshot.data);
upimg(snapshot.data);
_imageFile = null;
}
return getBody();
},
),
二、上传图片
upimg(File f) {
var filename = f.path.substring(f.path.lastIndexOf("/") + 1);
String key = '${new DateTime.now().millisecondsSinceEpoch}$filename';
key = imgDir + key;
DataUtils.tokenHttp(
Api.getSign, {'method': 'PUT', 'pathname': key}, context)
.then((val) async {
try {
Map<String, String> params = new Map();
params['Authorization'] = val['data'];
List<int> bytes = await f.readAsBytes();
http
.put(Api.prefix + key, headers: params, body: bytes)
.then((response) {
print(response);
});
} catch (exception) {
print(exception);
}
print(val);
});
}