flutter - 无法格式化文件以上传到 Cloudinary
问题描述
我正在尝试使用 Uploading 直接调用 REST API 将图像从Flutter应用程序发送到Cloudinary ,但出现此错误:
{"error":{"message":"Invalid file parameter. Make sure your file parameter does not include '[]'"}}
我试图将图像编码为一个字节数组,base64Encode 但没有一个起作用,我遵循了这个文档。
有人知道如何对文件进行编码以便我可以发送吗?
谢谢
编辑:
@override
Future<void> getImageSignature(File image) async {
return await _callWithExceptionWrap(() async {
if (image != null) {
DateTime dateTime = DateTime.now();
String url = _formatUrlForUploadSignature();
Dio dio = NetworkUtils.createDioConnection();
debugPrint('REQUEST TO SERVER');
Response serverResponse = await dio.post(url, data: {
"paramsToSign": {
'public_id': 'public_id_654',
"timestamp": dateTime.millisecondsSinceEpoch,
"upload_preset": "signed_preset",
"source": "uw",
}
});
debugPrint('REQUEST TO CLOUDINARY');
String signature = serverResponse.data['signature'];
List<int> bytes = image.readAsBytesSync();
var base64Image = base64Encode(bytes);
Map<String, dynamic> map = {
'api_key': _CLOUDINARY_API_KEY,
'public_id': 'public_id_654',
'signature': signature,
'source': 'uw',
'timestamp': dateTime.millisecondsSinceEpoch,
'upload_preset': 'signed_preset',
'file': base64Image,
};
debugPrint('json : ${map}');
// FormData formData = new FormData.fromMap(map);
Response cloudinaryResponse = await dio.post(_CLOUDINARY_URL, data: map);
debugPrint('*************************** Cloudinary response : ${cloudinaryResponse.data}');
}
});
签名没问题,因为我没有收到 401 错误(我从服务器收到的签名。
这是 cloudinary 网址:_CLOUDINARY_URL = ' https://api.cloudinary.com/v1_1/ /image/upload';
解决方案
这不是在公共客户端(移动应用程序)上使用的正确 api,您不应该公开您的 API_KEY 和 API_SECRET。请查看此包,它使用正确的 api 上传文件https://pub.dev/packages/cloudinary_public
推荐阅读
- python - Azure 函数中的 POST 端点
- python-3.x - 从父类函数调用内部函数
- python - 外部程序关闭时如何停止计时器[Python]
- html - 如何使用 svg mat-icon 调整 mat-button 的大小
- elasticsearch - Elasticsearch 日期直方图
- laravel - 只返回查询的值,而不是函数内的“column”:“value”键对
- google-cloud-platform - Google API Gateway 抛出 400,带有下划线的标头的错误请求错误
- python - 将 json 文件嵌套到 Python 中的不同 DF
- solr - 将 solr 文档与多值字段中的一个值匹配
- asp.net-core - DotNetCore SignalR 作为独立客户端