如何解决如何从 dart:io 服务器上的 HTTPRequest 读取文件
我正在尝试创建一个服务器以在本地运行,以便我的应用程序在调试时上传一些文件。它非常简单,完整的源代码是:
import 'dart:io';
void main(List<String> arguments) async {
const port = 8080;
final server = await HttpServer.bind(InternetAddress.anyIPv4,port);
server.listen((request) async {
if (request.uri.path != '/save_screenshot' || request.method != 'POST') {
request.response.statusCode = 404;
request.response.close();
return;
}
// Todo: read the file
request.response.statusCode = 200;
request.response.close();
});
print('screenshot server listening on $port.');
}
在代码中有一个 Todo 注释,我想从 HTTPRequest 读取文件,我用谷歌搜索了一下,找不到要复制的示例。有谁知道如何从 HTTPRequest 中读取文件?
这是它的发送方式(在客户端):
final url = 'http://<local_ip_address>:8080/save_screenshot';
var request = http.MultipartRequest('POST',Uri.parse(url));
request.files.add(
http.multipartfile.fromBytes(
'file',screenshot.bytes,filename: 'screenshot.png',),);
await request.send();
解决方法
我发现了如何从 HTTPRequest 读取文件。但要使其工作,必须安装一个名为 mime
的软件包。
然后将问题中的 TODO 注释替换为:
final boundary = request.headers.contentType!.parameters['boundary']!;
final mimeTransformer = MimeMultipartTransformer(boundary);
final parts = request.cast<List<int>>().transform(mimeTransformer);
await for (final part in parts) {
final file = File('uploaded_files/0.png');
await part.pipe(file.openWrite());
}
我对工作服务器做了一个要点:https://gist.github.com/lslv1243/1036364b10c6578d969cb4ed2d7eba42
注意:在要点上,我将路径从 /save_screenshot
更改为 /screenshot
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。