File upload 如何在Dart中上载文件?

File upload 如何在Dart中上载文件?,file-upload,dart,File Upload,Dart,我试图找到任何使用Dart脚本上传文件的示例 我理解在文件输入字段中被选中后在客户端读取的部分,但如何将其发布到服务器并保存为文件?在多部分编码解析器可用之前,您可以在客户端上使用以读取和上载文件内容。此API在浏览器中有很好的支持(请参阅) 在客户端: 导入'dart:html'; main(){ InputElement uploadInput=查询('#upload'); uploadInput.onChange.listen((e){ //将文件内容读取为dataURL 最终文件=upl

我试图找到任何使用Dart脚本上传文件的示例


我理解在文件输入字段中被选中后在客户端读取的部分,但如何将其发布到服务器并保存为文件?

在多部分编码解析器可用之前,您可以在客户端上使用以读取和上载文件内容。此API在浏览器中有很好的支持(请参阅)

在客户端:

导入'dart:html';
main(){
InputElement uploadInput=查询('#upload');
uploadInput.onChange.listen((e){
//将文件内容读取为dataURL
最终文件=uploadInput.files;
如果(files.length==1){
最终文件=文件[0];
最终读取器=新文件读取器();
reader.onLoad.listen((e){
sendDatas(reader.result);
});
reader.readAsDataUrl(文件);
}
});
}
///向服务器发送数据
sendDatas(动态数据){
最终请求=新的HttpRequest();
请求onReadyStateChange.listen((事件e){
如果(req.readyState==HttpRequest.DONE&&
(请求状态==200 | |请求状态==0)){
窗口警报(“上传完成”);
}
});
请求打开(“POST”http://127.0.0.1:8080/upload");
请求发送(数据);
}
在服务器端:

导入'dart:io';
main(){
最终服务器=新的HttpServer();
监听服务器('127.0.0.1',8080);
server.addRequestHandler((请求)=>request.path='/upload'
&&request.method.toLowerCase()=“post”
,(HttpRequest请求,HttpResponse响应){
_readBody(请求,(正文){
//处理您的数据URL
//图像示例:数据:image/jpeg;base64,/9j/4S2YRXhpZgAATU0AK。。。
//返回结果
response.statusCode=HttpStatus.CREATED;
response.contentLength=0;
response.outputStream.close();
});
});
}
///阅读[请求]正文,完成后调用[把手]。
_readBody(HttpRequest请求,无效把手体(字符串体)){
String bodyString=”“;//请求正文字节数据
最终完成者=新完成者();
最终sis=新的StringInputStream(request.inputStream,Encoding.UTF_8);
sis.onData=(){
bodyString=bodyString.concat(sis.read());
};
sis.onClosed=(){
完成符。完成(“”);
};
sis.onError=(例外情况e){
打印('exeption ocursed:${e.toString()}');
};
//处理请求并发送响应
完成者。未来。然后((){
车把体(腰线);
});
}
参考资料:


我们非常需要用于多部分编码的解析器。我可以在这个周末写一个,甚至可能是今天我回家的时候。谢谢Alexandre,但是你知道如何解码base64字符串并将其保存到Dart中的文件吗?一直在寻找php替代base64_Decode在dart中编写文件,您可以看看。Base64仅用于示例。但不幸的是,dart中暂时没有base64ToBytes()来解决此问题。您可以使用
reader.readAsText(文件)
reader.readAsBinaryString(文件)
而不是
reader.readAsDataURL(文件)
。感谢您的帮助Alexandre,我在服务器端为datauri和base64开发了自己的解码器,它工作得很好,我会尝试在某个时候共享它。这仍然是一条路吗?复制并粘贴了代码,但看起来类无法导入