当我在页面上按ctrl+v
和a gist的代码时,我尝试从剪贴板获取图像,这将对获取的图像内容console.log
进行编码。
我发现图像内容是带有特殊前缀的长base64字符串:
如何将其解码为二进制?我试图删除前缀文件中。但是文件无法显示,出现
invalid format
错误。但是,如果我将整个字符串粘贴到http://base64online.org/decode/,它也可以播放图像。
我使用的base64库是https://github.com/wstrange/base64,我的代码是:
import 'package:base64_codec/base64_codec.dart';
var body = /* the long str above */;
var prefix = "data:image/png;base64,";
var bStr = body.substring(prefix.length);
var bs = Base64Codec.codec.decodeList(bStr.codeUnits);
var file = new File("image.png");
file.writeAsBytesSync(bs);
我不知道哪里错了:(
最佳答案
尝试使用Dart SDK中的crypto
包。这将创建一个可以正常打开的image.png(我相信这是此图像...)
library foo;
import 'package:crypto/crypto.dart';
import 'dart:io';
void main() {
var body = "data:image/png;base64,iVBORw0KGgoAAAANSUh... snip";
var prefix = "data:image/png;base64,";
var bStr = body.substring(prefix.length);
var bytes = CryptoUtils.base64StringToBytes(bStr); // using CryptoUtils from Dart SDK
var file = new File("image.png");
file.writeAsBytesSync(bytes);
}
您需要将crypto
添加到pubspec.yaml
中:dependencies:
crypto: any
链接到https://github.com/wstrange/base64的库,在自述文件中也有说明:另请参阅How to native convert string -> base64 and base64 -> string