Cho đến khi trình phân tích cú pháp mã hóa nhiều phần có sẵn, bạn có thể sử dụng File API trên máy khách để đọc và tải lên nội dung tệp dưới dạng dataUrl. API này có hỗ trợ khá tốt trong các trình duyệt (xem http://caniuse.com/filereader).
Về phía khách hàng:
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);
}
Và trên phía máy chủ:
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);
});
}
Tài liệu tham khảo:
Nguồn
2012-11-09 10:51:01
Chúng tôi khá nhiều cần một cú pháp cho nhiều phần dữ liệu mã hóa. Tôi có thể viết một ngày cuối tuần này, thậm chí hôm nay khi tôi về nhà. –