使用 SAS 令牌在 Azure Blob 存储中上传图像问题

问题描述 投票:0回答:1

我正在解决有关使用 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 = 此密钥用于拍摄签名图像

azure-blob-storage
1个回答
0
投票

您无法查看图片的原因是您上传的是base64格式的数据。您需要做的是以二进制格式上传数据。

请尝试类似(未经测试的代码):

Response response = await dio.put(
      uploadtokenResponce.data["token"],
      data: bytes!,
      options: Options(
        headers: headers,
      ),
    );
© www.soinside.com 2019 - 2024. All rights reserved.