代码之家  ›  专栏  ›  技术社区  ›  Jithesh Kumar

如何在flutter中将图像和其他数据一起发送到服务器formdata

  •  0
  • Jithesh Kumar  · 技术社区  · 1 年前

    发送数据时有错误吗?

    图像路径接收正确,但图像是强制性的,不能上传

    import 'dart:developer';
    import 'dart:io';
    import 'package:dio/dio.dart';
    
    import 'package:real_estate_app/domain/core/api_end_points.dart';
    
    class APIAddService {
      static final Dio _dio = Dio();
    
      static Future<void> addProperty({
        required String accessToken,
        required String propName,
        required String propPrice,
        required String propAge,
        required int propStatus,
        required int propType,
        required String location,
        required int availabilityStatus,
        required List<String> spec,
        required List<String> size,
        required List<File> image,
      }) async {
        try {
          String apiUrl = ApiEndPoints.addproperty;
    
          List<MultipartFile> imageFiles = [];
          for (File img in image) {
            imageFiles.add(await MultipartFile.fromFile(
              img.path,
              filename: img.path.split('/').last,
            ));
          }
    
          FormData formData = FormData.fromMap({
            "prop_name": propName,
            "prop_price": propPrice,
            "prop_status": propStatus,
            "prop_type": propType,
            "prop_age": propAge,
            "location": location,
            "availability_status": availabilityStatus,
            "spec": spec,
            "size": size,
            "image": imageFiles,
          });
          log('imageFiles:$imageFiles');
          log('images: ${image.map((file) => file.path).toList()}');
          log('FormData: $formData');
          log('formfields:${formData.fields}');
          
          Options options = Options(headers: {
            "access-token": accessToken,
          });
    
          Response response = await _dio.post(
            apiUrl,
            data: formData,
            options: options,
          );
    
          print("Response status code: ${response.statusCode}");
          print("Response data: ${response.data}");
    
          if (response.statusCode == 200 && response.data['responseCode'] == 200) {
            print("Property added successfully!");
          } else {
            print("Failed to add property. Response data: ${response.data}");
          }
        } catch (e) {
          if (e is DioException) {
            print("Dio Error: ${e.message}");
            print("Dio Error Response: ${e.response?.data}");
          } else {
            print("Error: $e");
          }
        }
      }
    }
    

    做这件事的正确方法是什么? 我使用image_picker包来选择多个图像,然后使用Dio发送服务器请求上传它们。

    1 回复  |  直到 1 年前
        1
  •  1
  •   shashank    1 年前

    您错过了指定内容类型,请使用下面的代码段

    List<MultipartFile> imageFiles = [];
          for (File img in image) {
            String fileName = basename(img.path);
            String fileExtension = extension(fileName).substring(1);
            imageFiles.add(await MultipartFile.fromFile(
              img.path,
              contentType: MediaType('image', fileExtension),
              filename: fileName,
            ));
          }