使用Dart通过POST发送文件(仅限服务器端)

时间:2017-03-06 02:14:01

标签: file-upload dart server-side

我正在开发Telegram Bot,我需要通过POST发送文件作为用户的附件(例如.txt文件)。在此之后,我有两个问题:

  • 我应该使用哪种文件类型来发送文件?我听说过 流,但我不确定;
  • 拥有正确的文件类型,如何将其作为参数发送 网址POST?我尝试了http库和内置解决方案。

    以下是我现在正在使用的代码片段:

    Future<dynamic> sendRequest(String method, url, {json}) async {
        BaseClient bs = new IOClient();
        var request = new Request(method, url);
        request.headers['Content-Type'] = 'application/json';
        request.body = JSON.encode(json);
        var streamedResponse = await bs.send(request);
        var response = await Response.fromStream(streamedResponse);
    
        var bodyJson;
        try {
          bodyJson = JSON.decode(response.body);
        } on FormatException {
          var contentType = response.headers['content-type'];
          if (contentType != null && !contentType.contains('application/json')) {
            throw new Exception(
                'Returned value was not JSON. Did the uri end with ".json"?');
          }
          rethrow;
        }
    
        if (response.statusCode != 200) {
          if (bodyJson is Map) {
            var error = bodyJson['error'];
            if (error != null) {
              throw error;
            }
          }
          throw bodyJson;
        }
    
        return bodyJson;
    }
    

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我推断您使用的是Dart Pub http包。简要地看一下文档,它似乎支持多部分上传。请参阅MultipartRequestStreamedRequest课程。 (我自己没有使用这些,但它们看起来很简单。)

https://www.dartdocs.org/documentation/http/0.11.3%2B9/http/http-library.html

此问题可能有助于理解HTTP multipart/form-data文件上传。 How does HTTP file upload work?。其他人可能能够指出流媒体上传的良好资源。