使用Dart下载PNG文件(二进制文件)并显示它不起作用

时间:2013-08-17 16:29:45

标签: dart dart-webui

我有一个休息API,我正在调用它来检索要在我的页面上显示的PNG图像。

我的代码:

void getProfilePicture(var pic_id) {

  request = new HttpRequest();
  request.responseType = "blob";
  request.onReadyStateChange.listen(onPicture); 

  // Get Basic Auth credentials
  var authorization = 'Basic '+storage.loginData['password'];

  // Build JSON
  Map reqData = new Map();
  reqData['id'] = pic_id.toString();
  reqData['type'] = 'WEB_SMALL';

  // SEND the request to the server.
  var url = sifted.serverAPI+'/api/v1/pictures/getpicture';
  request.open('POST', url);
  request.withCredentials = false;
  request.setRequestHeader('Authorization',authorization);
  request.setRequestHeader('Content-Type','application/json');
  request.send(json.stringify(reqData));
}

void onPicture(_) {
  if (request.readyState == HttpRequest.DONE &&
      request.status == 200) {
    Blob blob = new Blob(request.response);

    FileReader reader = new FileReader();
    reader.onLoad.listen((fe) { 
      ImageElement imgInput = query('#profilepic');
      imgInput.src = reader.result;
    });
    reader.readAsDataUrl(blob); 
  }  
}

它不起作用,我在Dart编辑器中收到这些错误:

Exception: type 'Blob' is not a subtype of type 'List' of 'blobParts'.
Exception: type 'Blob' is not a subtype of type 'List' of 'blobParts'.

有关我做错的任何建议吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

问题在于这一行:

Blob blob = new Blob(request.response);

Blob构造函数需要List而不是其他Blobrequest.response在您的用例中):factory Blob(List blobParts, [String type, String endings])

只需删除该行,然后直接调用reader.readAsDataUrl(request.response)即可。