我正在解决有关使用 sas token api 在 Azure blob 存储中上传图像的关键问题。 在通过 Postman 测试功能时,我们观察到图像上传过程成功,产生状态代码 201。但是,当在我们的应用程序中尝试相同的操作时,尽管我们收到状态代码 201,但图像失败加载。
Future<void> uploadImageToAzure() async {
await getUploadTokenAPi();
final image = await _signaturePadKey.currentState!.toImage();
final byteData = await image.toByteData(format: ui.ImageByteFormat.png);
setState(() {
});
bytes = byteData?.buffer.asUint8List(byteData.offsetInBytes,byteData.lengthInBytes);
setState(() {});
var headers = {
'x-ms-blob-content-type': 'image/png',
'x-ms-blob-type': 'BlockBlob',
'Content-type': 'application/octet-stream',
'Accept-Encoding': 'gzip, deflate, br',
'Cache-Control': 'max-age=0',
};
Dio dio = Dio();
// log("${base64Encode(bytes!)}");
Response response = await dio.put(
uploadtokenResponce.data["token"],
data: base64Encode(bytes!),
options: Options(
headers: headers,
),
);
if (response.statusCode == 201) {
print("================");
log(json.encode(response.headers.map));
print("================");
log("Data : ${response.statusCode}");
} else {
print(response.statusMessage);
}
try {} catch (e) {
print('Error uploading image: $e');
}
}
_signaturePadKey = 此密钥用于拍摄签名图像
您无法查看图片的原因是您上传的是base64格式的数据。您需要做的是以二进制格式上传数据。
请尝试类似(未经测试的代码):
Response response = await dio.put(
uploadtokenResponce.data["token"],
data: bytes!,
options: Options(
headers: headers,
),
);