繁体   English   中英

如何将文件(pdf、doc/图像)从 file_picker 上传到 flutter 上的 api 服务器

[英]how to upload files (pdf, doc / image) from file_picker to api server on flutter

如何将文件(pdf、doc/图像)从 file_picker 上传到 flutter 上的 api 服务器。

我有一个 flutter 项目想要从所选数据上传文件。 到 select 一个我使用 file_picker 的文件。 以下代码为 select 一个文件。

void _openFileExplorer() async {
setState(() => _loadingPath = true);
try {
  _directoryPath = null;
  _paths = (await FilePicker.platform.pickFiles(
    type: _pickingType,
    allowMultiple: _multiPick,
    allowedExtensions: ['jpg', 'pdf', 'doc', 'docx', 'png'],
  ))
      ?.files;
} on PlatformException catch (e) {
  print("Unsupported operation" + e.toString());
} catch (ex) {
  print(ex);
}
if (!mounted) return;
setState(() {
  _loadingPath = false;
  _fileName = _paths != null ? _paths.map((e) => e.name).toString() : '...';
});

}

那怎么上传呢?

我正在使用这个 function 将文件上传到我的服务器

 static Future<bool> _upload(File file, int id) async { var headers = {'Authorization': 'Bearer TOKEN'}; // remove headers if not wanted var request = http.MultipartRequest( 'POST', Uri.parse(BaseUrl + ADD_IMAGE_TO_PRODUCTS)); // your server url request.fields.addAll({'id': '$id'}); // any other fields required by your server request.files.add(await http.MultipartFile.fromPath('image', '${file.path}')); // file you want to upload request.headers.addAll(headers); http.StreamedResponse response = await request.send(); if (response.statusCode == 200) { print(await response.stream.bytesToString()); return true; } else { print(response.reasonPhrase); return false; } } }

进口http package

import 'package:http/http.dart' as http;

使用default构造函数创建MultipartRequest

var request = http.MultipartRequest('POST', Uri.parse(url));
  request.files.add(
    http.MultipartFile(
      'picture',
      File(filename).readAsBytes().asStream(),
      File(filename).lengthSync(),
      filename: filename.split("/").last
    )
  );
  var res = await request.send();

使用MultipartFile.fromBytes()

  var request = http.MultipartRequest('POST', Uri.parse(url));
  request.files.add(
    http.MultipartFile.fromBytes(
      'picture',
      File(filename).readAsBytesSync(),
      filename: filename.split("/").last
    )
  );
  var res = await request.send();

使用MultipartFile.fromPath()

  var request = http.MultipartRequest('POST', Uri.parse(url));
  request.files.add(
    await http.MultipartFile.fromPath(
      'picture',
      filename
    )
  );
  var res = await request.send();

添加常规文本字段

var request = http.MultipartRequest('POST', Uri.parse(url));
request.fields['key'] = 'value';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM