私はダーツスクリプトでファイルをアップロードする例を探しています。ダーツでファイルをアップロードするには?
ファイル入力フィールドで選択した後でクライアント側で読むことについては分かりますが、サーバーにPOSTしてファイルとして保存するにはどうすればよいですか?
私はダーツスクリプトでファイルをアップロードする例を探しています。ダーツでファイルをアップロードするには?
ファイル入力フィールドで選択した後でクライアント側で読むことについては分かりますが、サーバーにPOSTしてファイルとして保存するにはどうすればよいですか?
マルチパートエンコーディングパーサーが利用可能になるまで、クライアント上でFile APIを使用して、ファイルの内容を読み込み、アップロードすることができます。dataUrl。このAPIは、ブラウザで非常によくサポートされています(http://caniuse.com/filereader参照)。クライアント側では
:
import 'dart:io';
main() {
final server = new HttpServer();
server.listen('127.0.0.1', 8080);
server.addRequestHandler((request) => request.path == '/upload'
&& request.method.toLowerCase() == 'post'
, (HttpRequest request, HttpResponse response) {
_readBody(request, (body) {
// handle your dataURL
// example with image : data:image/jpeg;base64,/9j/4S2YRXhpZgAATU0AK...
// return result
response.statusCode = HttpStatus.CREATED;
response.contentLength = 0;
response.outputStream.close();
});
});
}
/// Read body of [request] and call [handleBody] when complete.
_readBody(HttpRequest request, void handleBody(String body)) {
String bodyString = ""; // request body byte data
final completer = new Completer();
final sis = new StringInputStream(request.inputStream, Encoding.UTF_8);
sis.onData =(){
bodyString = bodyString.concat(sis.read());
};
sis.onClosed =() {
completer.complete("");
};
sis.onError = (Exception e) {
print('exeption occured : ${e.toString()}');
};
// process the request and send a response
completer.future.then((_){
handleBody(bodyString);
});
}
参考文献:
import 'dart:html';
main() {
InputElement uploadInput = query('#upload');
uploadInput.onChange.listen((e) {
// read file content as dataURL
final files = uploadInput.files;
if (files.length == 1) {
final file = files[0];
final reader = new FileReader();
reader.onLoad.listen((e) {
sendDatas(reader.result);
});
reader.readAsDataUrl(file);
}
});
}
/// send data to server
sendDatas(dynamic data) {
final req = new HttpRequest();
req.onReadyStateChange.listen((Event e) {
if (req.readyState == HttpRequest.DONE &&
(req.status == 200 || req.status == 0)) {
window.alert("upload complete");
}
});
req.open("POST", "http://127.0.0.1:8080/upload");
req.send(data);
}
とサーバ側の
はAlexandreに感謝します。しかし、base64の文字列をデコードし、Dartのファイルに保存する方法を知っていますか? PHPの代替base64_decodeを探していた –
ダーツでファイルを書き込むには、http://www.dartlang.org/articles/io/をご覧ください。 Base64は例のためだけでした。しかし残念ながら、base64ToBytesはダーツでは使用できません(http://dartbug.com/2458)。あなたの周りを回避するには、おそらく 'reader.readAsText(file)'や 'reader.readAsBinaryString(file)'を ' reader.readAsDataURL(ファイル) ' –
アレクサンドルの助けをいただきありがとうございます。私は、datauriとbase64用のサーバー側で独自のデコーダを開発しました。これは素晴らしいことですが、いつかそれを共有しようとします。 –
我々はかなりマルチパートのためのパーサを必要としますエンコーディング。今週末、私が家に帰ると、今日でも1つ書くことができます。 –