当前位置: 首页 > 知识库问答 >
问题:

base64编码PNG到Blob

岳昊空
2023-03-14

我正在用base64编码的PNG创建一个Blob。。。

  final FormData formData = new FormData();
  final String base64Image = "data:image/png;base64,iVBORw0K<reduced the data.....>gg==";

  final Blob blob = new Blob([base64Image],"image/png");

  formData.append('file', blob, "android.png");

  req.send(formData);

我不知道我做错了什么,但是blob的内容是一些东西,但不是我想要的png。

thx提前...

[更新]

  final FormData formData = new FormData();
  final String base64Image = "iVBORw0KGgo<...reduce data...>kJggg==";

  // BTW: I used the Base64 from dart-sdk/io/base64.dart
  final List<int> intList = Base64.decode(base64Image);
  final Int8Array int8array = new Int8Array.fromList(intList);
  final String atobString = window.atob(base64Image);

  // Does not work
  // final Blob blob = new Blob([atobString]);

  // The same...
  // final Blob blob = new Blob([int8array]);

  formData.append('file', blob, "android.png");
  //formData.append('new-filename', "icon-share.png");

  req.send(formData);

我认为Base64生成的字节数。解码是可以的。文件大小为1003字节,解码也产生1003字节。

[更新2]以下是我谈论的来源:https://github.com/MikeMitterer/AndroidIconGenerator.DART/blob/master/test/src/restserver.dart

共有2个答案

蒋奕
2023-03-14

在编码到Blob之前,需要解码base64(即atob)url。很简单!试试看!

柯星华
2023-03-14

好的,这是我自己问题的答案:

import 'dart:convert'
...

test(' -> Upload File to REST-Server', () {

  final HttpRequest req = new HttpRequest();

  loadEnd(HttpRequest request) {
    if (request.readyState == HttpRequest.DONE) {

      switch(request.status) {

        case HttpStatus.HTTP_200_OK:
          expect(response['path'].endsWith("android.png"),true);

          break;

        case HttpStatus.HTTP_0_COMMUNICATION_FAILED:
          expect(request.status,HttpStatus.HTTP_200_OK);
          break;

        default:
          expect(request.status,HttpStatus.HTTP_200_OK);
          break;
      }
    }
  }

  req.open("POST", uriprovider.forUpload().toString());

  // REST returns JSON Data
  req.setRequestHeader('Accept', 'application/json');

  req.onLoadEnd.listen(expectAsync1((ProgressEvent e) => loadEnd(req)));

  final FormData formData = new FormData();

  final String base64Image = "data:image/png;base64,iVBORw0KG<code reduce for sample>RU5ErkJggg==";
  final String raw = "iVBORw0KG<code reduce for sample>RU5ErkJggg==";
  final String contenttype = "image/png";

  // Base64 is a modified version of dart-sdk/lib/io/base64.dart
  final List<int> intList = BASE64.decode(raw);
  final Int8Array int8array = new Int8Array.fromList(intList);

  // Converting to Uint8Array brought the solution!
  final Uint8Array uint8array = new Uint8Array(intList.length);

  // does not work!
  //var binary = window.atob(raw);

  final Blob blob = new Blob([uint8array]);

  formData.append('file', blob, "android.png");

  req.send(formData);

});

感谢所有人把我推向正确的方向!

 类似资料:
  • 介绍 Base64编码是用64(2的6次方)个ASCII字符来表示256(2的8次方)个ASCII字符,也就是三位二进制数组经过编码后变为四位的ASCII字符显示,长度比原来增加1/3。 使用 String a = "伦家是一个非常长的字符串"; //5Lym5a625piv5LiA5Liq6Z2e5bi46ZW/55qE5a2X56ym5Liy String encode = Base64.en

  • 你们知道一种用javascript将bas64字符串转换成PNG的方法吗?我基本上想在网站上展示它。 示例字符串:

  • 问题内容: 我想将以Base64编码的PNG图像加载到canvas元素。我有以下代码: 在Chrome 8中,我收到错误消息: 在Firefox的Firebug中,这是:“对象的类型与与该对象关联的参数的预期类型不兼容”代码:“ 17” 在那个base64中,是我在GIMP中制作的5x5px黑色PNG正方形,并将其转换为GNU / Linux程序base64中的base64。 问题答案: 从外观上

  • 问题内容: 这是我的代码,我不明白为什么解码功能不起作用。 请少有洞察力会很棒。 它给了我:[解码错误-输出不是utf-8] [解码错误-输出不是utf-8] 问题答案: 返回 最大 长度。 此长度对于调整缓冲区大小很有用,但是不会写入缓冲区的一部分,因此将不是有效的UTF-8。 您只需要使用函数返回的实际写入长度即可。

  • 问题内容: 我正在工作的项目是使用Jackson JSON 序列化程序将一堆Java对象转换为String,以便将它们发送到REST服务。 其中一些对象包含敏感数据,因此我编写了自定义序列化程序以将这些对象序列化为JSON字符串,然后对其进行gzip,然后使用; 对其进行加密。 这会将字符串转换为字节数组,因此我在编解码器中使用Base64编码器将字节数组转换为字符串。REST接口背后的自定义反序

  • Go提供了对base64编码和解码的内置支持 package main // 这种导入包的语法将默认的base64起了一个别名b64,这样 // 我们在下面就可以直接使用b64表示这个包,省点输入量 import b64 "encoding/base64" import "fmt" func main() { // 这里是我们用来演示编码和解码的字符串 data := "abc12