【问题标题】:How to read file from HTTPRequest on a dart:io server如何从 dart:io 服务器上的 HTTPRequest 读取文件
【发布时间】:2021-09-19 07:33:39
【问题描述】:

我正在尝试创建一个服务器以在本地运行,以便我的应用程序在调试时上传一些文件。非常简单,完整的源代码是:

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();

【问题讨论】:

    标签: dart dart-io


    【解决方案1】:

    我发现了如何从 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 2014-01-18
      • 2012-06-19
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      相关资源
      最近更新 更多