एक मल्टीपार्ट एन्कोडिंग पार्सर उपलब्ध होने तक, आप के रूप में फ़ाइल सामग्री को पढ़ने और अपलोड करने के लिए क्लाइंट पर File API का उपयोग कर सकते हैं। ब्राउज़र में इस एपीआई का काफी अच्छा समर्थन है (http://caniuse.com/filereader देखें)।
ग्राहक के पक्ष में:
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);
}
और सर्वर साइड पर:
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);
});
}
संदर्भ:
स्रोत
2012-11-09 10:51:01
हम काफी बहुखण्डीय के लिए एक पार्सर की जरूरत है एन्कोडिंग। मैं इस सप्ताह के अंत में एक लिख सकता हूं, शायद आज भी जब मैं घर जाऊं। –