Uploaded file are no longer usable Flutter

Viewed 17

My problem is that I am uploading files to a google bucket storage from a Flutter application. The files I upload are simple images like signatures or photos (code below).

When I upload them and try to get a preview or download them back from the bucket, it says I do not support this file format.

I am trying to use this documentation (I need to use the Rest approach since I have to log in with an STS Token): https://cloud.google.com/storage/docs/uploading-objects

How I get the image base64 string (value is usable when I try it on https://base64.guru/converter/decode/file)

final data = await _signaturePadKey.currentState!
    .toImage(pixelRatio: 3.0);
final image = await data.toByteData(
    format: ui.ImageByteFormat.png);
// To send
final base64String =
    base64.encode(image!.buffer.asUint8List());

setState(() => {_signatureFile = base64String});

How I send it :

Future postOKTrackingSignature(String signature, String projectID) async {
  await refreshSTSToken(projectID);
  String token = await getSTSToken();

  // Headers

  var headersData = {
    "Authorization": "Bearer $token",
    "Content-Type": "image/png"
  };

  // URL building

  var resourcePart =
      "xxx";

  var paramsData = {
    'uploadType': 'multipart',
    'name': "${resourcePart}signature.png",
  };

  var baseURI = 'https://storage.googleapis.com/upload/storage/v1/b/';
  String bucketName = "xxx";
  var query = paramsData.entries.map((p) => '${p.key}=${p.value}').join('&');

  // Body

  // var dataPrepation = base64.normalize(signature);
  var bodyData = "data:image/png;base64,$signature";

  final response = await http.post(
      Uri.parse("$baseURI$bucketName/o?$resourcePart$query"),
      headers: headersData,
      body: bodyData);

  switch (response.statusCode) {
    case 200:
      return {"statusCode": response.statusCode};
    default:
      return {"statusCode": response.statusCode, "error": response.body};
  }
}
0 Answers
Related