我正在使用以下函数将文件从我的应用程序上传到服务器:

void _upload(File file) {

    if (file == null) return;
    setState(() {
      _textoInfo = "subiendofotoalservidor".tr();
    });

    String base64Image = base64Encode(file.readAsBytesSync());
    String fileName = file.path.split("/").last;

    http.post(Uri.parse(phpEndPoint), body: {
      "image": base64Image,
      "name": fileName,
    }).then((res) async {
      print("respuesta servidor ${res.body}");

      setState(() {
        _textoInfo = "fotoperfilactualizada".tr();
        miImagen = fileName;
      });


      print("foto subida ${miImagen}");

      _cambiarFotoAdmin(miImagen, widget.administrador.email, context);




    //  cambiarImagenUsuario(fileName);
    }).catchError((err) {

    });

    http.post(Uri.parse(phpEndPointFoto), body: {
      "foto":fileName,
      "id": miId,
    }).then((res) async {





    //  cambiarImagenUsuario(fileName);
    Provider.of<UsuarioProvider>(context, listen: false).cambiarImagenAdministrador(fileName);
    }).catchError((err) {

    });


  }

现在,在我的新应用程序中,我在Web浏览器上执行Ffltter项目,IMAGE_PICKER不是从设备库中拾取图像,而是在计算机文件系统上拾取图像,拾取的图像来自类型Uin8List.

如何将Function_Upload(文件文件)改为_Upload(Uin8List文件)?

编辑

这里有用于 Select 图像的函数:

  Future<void> _openImagePickerGallery() async {

    if(!kIsWeb){
      final XFile? pickedImage =
      await _picker.pickImage(source: ImageSource.gallery);
      if (pickedImage != null) {
        setState(() {
          _image = File(pickedImage.path);
        });
      }
    }
    else if(kIsWeb){
      final XFile? pickedImage =
      await _picker.pickImage(source: ImageSource.gallery);
      if (pickedImage != null) {

        var f = await pickedImage.readAsBytes();
        
        
        setState(() {
          hayFoto = true;
          webImage = f;
        });

        //  _image = File(pickedImage.path);

      }
    }

  }

推荐答案

我的朋友,我希望你做得好,

void _upload(Uint8List fileBytes, String fileName) {

  if (fileBytes == null) return;

  setState(() {
    _textoInfo = "subiendofotoalservidor".tr();
  });

  String base64Image = base64Encode(fileBytes);

  http.post(Uri.parse(phpEndPoint), body: {
    "image": base64Image,
    "name": fileName,
  }).then((res) async {
    print("respuesta servidor ${res.body}");

    setState(() {
      _textoInfo = "fotoperfilactualizada".tr();
      miImagen = fileName;
    });

    print("foto subida ${miImagen}");

    _cambiarFotoAdmin(miImagen, widget.administrador.email, context);

    //  cambiarImagenUsuario(fileName);
  }).catchError((err) {

  });

  http.post(Uri.parse(phpEndPointFoto), body: {
    "foto":fileName,
    "id": miId,
  }).then((res) async {

    Provider.of<UsuarioProvider>(context, listen: false).cambiarImagenAdministrador(fileName);
  }).catchError((err) {

  });
}

获取文件名并将其传递给_Upload方法:

import 'package:file_picker/file_picker.dart';

Future<void> pickAndUploadFile() async {
  FilePickerResult result = await FilePicker.platform.pickFiles();
  if (result != null && result.files.single != null) {
    String fileName = result.files.single.name;
    Uint8List fileBytes = result.files.single.bytes;
    _upload(fileBytes, fileName);
  }
}

您需要调整以读取文件及其名称.

让我知道我能帮到你.

快乐的编码...

Flutter相关问答推荐

类型flatter doctor get zsh:未找到命令:macO中flatter

如何在Flutter 屏幕中添加箭头形状

获取屏幕大小的滚动视图与动态大小?

Android Emulator冻结,但在调整窗口大小时解冻

Build.gradle专线:2个Flutter Flutter

Flutter 蜂窝-检索非基元数据类型列表

Android Studio将不会构建iOS模拟器应用程序,因为plist.info有问题

'Flutter的无效常数值错误

为什么我的页面控制器在使用Riverpod时没有更改我的页面视图?

如何在 VS Code 中启用 Flutter 运行/调试工具栏?

像图像一样Flutter 自定义标签

是否可以在 flutter 应用程序中使用 jetpack compose?

reactive_flutter_BLE - 应用找到设备但无法连接(并读取 BLE 数据)

在提供程序包更改通知程序中构建倒计时时钟

Android Electric eel Mac M1:运行 flutter doctor -v 时无法找到Bundle 的 java 版本

type '({bool growable}) => List' 不是类型转换中类型 'List' 的子类型

SfCircularChart 周围的额外间距

如何在 flutter 的alert 对话框中实现进度指示器?

Flutter:如何将列表转换为字符串?

如何使用 Riverpod 在运行时动态创建提供程序?