4

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ではありません。

事前にt​​hx..。

[更新]

  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.decodeによって生成されたバイト数は問題ないと思います。ファイルサイズは1003バイトで、デコードでも1003バイトが生成されます。

[アップデート2 ]これが私が話しているソースです: https ://github.com/MikeMitterer/AndroidIconGenerator.DART/blob/master/test/src/restserver.dart

4

2 に答える 2

1

OK、これが私自身の質問に対する答えです:

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);

});

みんなが私を正しい方向に押してくれてありがとう!

于 2013-02-08T19:17:44.840 に答える
0

Blobにエンコードする前に、 base64(つまり、atob)URLをデコードする必要があります。それは簡単です!それを試してみてください!

于 2013-02-04T09:43:30.090 に答える