• Flutter 文件上传 (基于 http.dart)


    前言  Flutter 文件/图片  上传

    使用 Flutter框架   基于 http.dart 网络库  ImagePicker.pickImage 进行的 App开发:

    今天开发过程中 需要上传 图片:看了下官方文档竟然没有介绍的!!!

    后来 google 搜索到了在这里记录下:

    参考了这位大兄弟

    这三种方式的选型   需要和你后台上传方式对应上,否则就没办法上传成功!自然就是报 500,我这里选择的是三种

    Flutter 基于http 库 上传文件的几种方式:

    • http.MultipartFile
      1. (String filename, String url) async {
      2. var request = http.MultipartRequest('POST', Uri.parse(url));
      3. request.files.add(
      4. http.MultipartFile(
      5. 'picture',
      6. File(filename).readAsBytes().asStream(),
      7. File(filename).lengthSync(),
      8. filename: filename.split("/").last
      9. )
      10. );
      11. var res = await request.send();
      12. }
    • http.MultipartFile.fromBytes
      1. (String filename, String url) async {
      2. var request = http.MultipartRequest('POST', Uri.parse(url));
      3. request.files.add(
      4. http.MultipartFile.fromBytes(
      5. 'picture',
      6. File(filename).readAsBytesSync(),
      7. filename: filename.split("/").last
      8. )
      9. );
      10. var res = await request.send();
      11. }
    • http.MultipartFile.fromPath
      1. (String filename, String url) async {
      2. var request = http.MultipartRequest('POST', Uri.parse(url));
      3. request.files.add(
      4. await http.MultipartFile.fromPath(
      5. 'picture',
      6. filename
      7. )
      8. );
      9. var res = await request.send();
      10. }

    代码:

    1. import 'package:http/http.dart' as http;
    2. import 'dart:convert' as convert;
    3. Future<ResponseBase> upLoadFiles(
    4. {required String pathCode, required String filePath}) async {
    5. try {
    6. AppOverlay().showLoading();
    7. Uri url = Uri.https(AppHost.hostFile, 'Images/ImageSingleUpload');
    8. http.MultipartRequest request = http.MultipartRequest('POST', url);
    9. request.fields['pathCode'] = pathCode;
    10. http.MultipartFile multipartFile =
    11. await http.MultipartFile.fromPath("image", filePath);
    12. request.files.add(multipartFile);
    13. http.StreamedResponse response = await request.send();
    14. if (response.statusCode == 200) {
    15. //这里返回值用到了Stream回调
    16. String res = await response.stream.bytesToString();
    17. Map<String, dynamic> jsonResponse =
    18. convert.jsonDecode(res) as Map<String, dynamic>;
    19. ResponseBase _responseBase = ResponseBase(
    20. errorCode: jsonResponse['errorCode'],
    21. action: jsonResponse['action'],
    22. message: jsonResponse['message'],
    23. value: jsonResponse['value'],
    24. success: jsonResponse['success'],
    25. );
    26. return _responseBase;
    27. } else {
    28. return ResponseBase(
    29. errorCode: response.statusCode,
    30. action: 0,
    31. message: '上传文件失败 请稍后再试 ${response.statusCode}',
    32. success: false,
    33. value: {'error get'},
    34. );
    35. }
    36. } catch (exception) {
    37. AppScreen.showToast('上传文件失败 请稍后再试 ${exception.toString()}');
    38. return ResponseBase(
    39. errorCode: -100,
    40. action: 0,
    41. message: '网络异常 请稍后再试 -100',
    42. success: false,
    43. value: {'error get': exception.toString()},
    44. );
    45. } finally {
    46. AppOverlay().hideLoading();
    47. }
    48. }

  • 相关阅读:
    数据结构- 树
    第30届深圳礼品展暨1688工厂直采季开幕,携手创增长
    stacking集成模型预测回归问题
    jenkins工具系列 —— 插件 使用Changelog获取commit记录
    CPDA|如何拥有数据分析思维?
    pytorch图像识别(基于识别验证码),读取本都数据集图片以及使用神经网络进行训练
    python基础----环境搭建-----01
    EasyExcel
    华为OD机考算法题:TLV解码
    鸿蒙HarmonyOS实战-ArkUI动画(放大缩小视图)
  • 原文地址:https://blog.csdn.net/nicepainkiller/article/details/125905242