微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 dart:io 服务器上的 HTTPRequest 读取文件

如何解决如何从 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 举报,一经查实,本站将立刻删除。