1

我在客户端使用 AngularDart,在 API/服务器端使用 Aqueduct 3.0。我现在想上传文件并将它们存储在文件系统上。

有没有推荐的 Aqueduct 如何接收文件/多部分表单请求并将它们存储在本地的方法?

我一直在研究其他几个服务器框架,但都是为 Dart 1 而不是 Dart 2 构建的。在我开始弄清楚如何编写自己的服务器以接收和存储文件之前,我想我会问首先在这里,因为我看到有人在 GitHub 上使用 #315 请求它。

在 Angular 中,上传函数如下所示(file_uploader.dart)

import 'dart:html';

import 'package:angular/angular.dart';
import 'package:angular_forms/angular_forms.dart';

/// AngularDart component for uploading files
// https://gist.github.com/alexd1971/67f4502c5e0d594d30f901fb0559fd7e
@Component(
  selector: 'file-uploader',
  templateUrl: 'file_uploader.html',
  directives: [coreDirectives, formDirectives]
)
class FileUploader {
  String progress;
  void uploadFiles(form) {
    var formData = new FormData(form);
    final request = new HttpRequest();
    request.open('POST', 'http://localhost:9999/upload');
    request.upload.onProgress.listen((ProgressEvent e) {
      progress = (e.loaded*100/e.total).toInt().toString() + '%';
    });
    request.onLoad.listen((e) {
      print('Uploaded');
    });
    request.send(formData);
  }
}
4

1 回答 1

0

这个功能在队列中,一旦 Dart 2 的东西慢下来,我们就可以开始工作了。您还可以通过创建一个对多部分表单数据进行编码和解码的Codec子类(来自标准库)来扩展框架以在您的项目中执行的操作。dart:convert您在启动期间为内容类型注册该编解码器:

CodecRegistry.add(ContentType("multipart/mixed"), MultipartCodec())

有关编解码器的示例实现,请参阅源代码中的application/x-www-form-urlencoded

于 2018-08-06T20:37:58.857 回答