Dart:根据客户端请求处理服务器上上传的文件
Dart: Processing an uploaded file on the server from client request
我正在尝试在服务器上处理从客户端上传的图像,但收到以下错误。我是不是处理错了httpRequest?
未处理的异常:
未捕获错误:HttpException:接收数据时连接关闭,uri = /api/upload
///客户端代码(dart文件)(Works@发送请求)
sendData(dynamic data) {
final req = new HttpRequest();
FormData fd = new FormData();
fd.append('uploadContent', data);
fd.appendBlob('uploadContent', data);
req.open("POST", "http://127.0.0.1:8080/api/upload", async: true);
req.send(fd);
req.onReadyStateChange.listen((Event e) {
if (req.readyState == HttpRequest.DONE &&
(req.status == 200 || req.status == 0)) {
window.alert("upload complete");
}
});
}
InputElement uploadInput = document.querySelector('#sideBar-profile-picture');
uploadInput.onChange.listen((Event event){
// read file content as dataURL
final files = uploadInput.files;
if (files.length == 1) {
File file = files[0];
FileReader reader = new FileReader();
reader.onLoad.listen((e) {
print('results: ${reader.result}');
sendData(reader.result);
});
reader.readAsArrayBuffer(file);
}
});
我有一个小型服务器侦听请求 (/api/upload) 并调用 handleUploadRequest 并将 httpRequest 作为参数传入。
服务器代码(这是我卡住的地方)
Future<Null> handleUploadRequest(final HttpRequest httpRequest) async {
httpRequest.fold(new BytesBuilder(), (b, d) => b..add(d)).then((builder) {
var data = builder.takeBytes();
print('bytes builder: ${data}');
});
}
我正在尝试读取数据,以便可以将其存储在 cdn 上,但从来没有机会这样做,因为在接收数据时连接总是关闭。
对于能够完成此任务的任何帮助,我们将不胜感激。过去几天一直在做这个:/
很难说 when/if 您关闭了 httpRequest。如果您在 handleUploadRequest returns 之后立即执行此操作,它确实会关闭连接,因为您没有等待 httpRequest.fold()
完成。如下所示添加 await 并确保调用 httpRequest.close() after 此函数异步完成应该工作
Future<Null> handleUploadRequest(final HttpRequest httpRequest) async {
await httpRequest.fold(new BytesBuilder(), (b, d) => b..add(d)).then((builder) {
var data = builder.takeBytes();
print('bytes builder: ${data}');
});
}
(仅供参考)我有一个类似的代码,可以在使用 curl 进行测试和上传文件时使用
我正在尝试在服务器上处理从客户端上传的图像,但收到以下错误。我是不是处理错了httpRequest?
未处理的异常:
未捕获错误:HttpException:接收数据时连接关闭,uri = /api/upload
///客户端代码(dart文件)(Works@发送请求)
sendData(dynamic data) {
final req = new HttpRequest();
FormData fd = new FormData();
fd.append('uploadContent', data);
fd.appendBlob('uploadContent', data);
req.open("POST", "http://127.0.0.1:8080/api/upload", async: true);
req.send(fd);
req.onReadyStateChange.listen((Event e) {
if (req.readyState == HttpRequest.DONE &&
(req.status == 200 || req.status == 0)) {
window.alert("upload complete");
}
});
}
InputElement uploadInput = document.querySelector('#sideBar-profile-picture');
uploadInput.onChange.listen((Event event){
// read file content as dataURL
final files = uploadInput.files;
if (files.length == 1) {
File file = files[0];
FileReader reader = new FileReader();
reader.onLoad.listen((e) {
print('results: ${reader.result}');
sendData(reader.result);
});
reader.readAsArrayBuffer(file);
}
});
我有一个小型服务器侦听请求 (/api/upload) 并调用 handleUploadRequest 并将 httpRequest 作为参数传入。
服务器代码(这是我卡住的地方)
Future<Null> handleUploadRequest(final HttpRequest httpRequest) async {
httpRequest.fold(new BytesBuilder(), (b, d) => b..add(d)).then((builder) {
var data = builder.takeBytes();
print('bytes builder: ${data}');
});
}
我正在尝试读取数据,以便可以将其存储在 cdn 上,但从来没有机会这样做,因为在接收数据时连接总是关闭。
对于能够完成此任务的任何帮助,我们将不胜感激。过去几天一直在做这个:/
很难说 when/if 您关闭了 httpRequest。如果您在 handleUploadRequest returns 之后立即执行此操作,它确实会关闭连接,因为您没有等待 httpRequest.fold()
完成。如下所示添加 await 并确保调用 httpRequest.close() after 此函数异步完成应该工作
Future<Null> handleUploadRequest(final HttpRequest httpRequest) async {
await httpRequest.fold(new BytesBuilder(), (b, d) => b..add(d)).then((builder) {
var data = builder.takeBytes();
print('bytes builder: ${data}');
});
}
(仅供参考)我有一个类似的代码,可以在使用 curl 进行测试和上传文件时使用