将文件从Flutter Web上传到node.js / express.js服务器

发布于 2025-02-09 16:23:48 字数 117 浏览 2 评论 0原文

我正在研究一个flutter Web项目,FilePicker将路径返回flutter Web上的null,那么如何创建一个可以发送到Multipart将其发送到Node.js或Express.js Server的文件?

I am working on a Flutter web project and FilePicker returns the path as null on Flutter web, so how can I create a File that I can send to Multipart for sending it to Node.js or Express.js Server?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你穿错了嫁妆 2025-02-16 16:23:50

需要

flutter侧:

  1. dio
  2. =“ https://pub.dev/packages/file_picker” rel =“ noreferrer”> pifer picker

nodejs side:

  1. multer

flutter-选择文件

test() async {
    // * Pick a File
    FilePickerResult? result = await FilePicker.platform.pickFiles();

    if (result != null) {
      // * cast it to bytes
      List<int> bytes = result.files.single.bytes!.cast();
      // * Get its name, will use it later.
      var name = result.files.single.name;
      // * Send it to method that will make HTTP request.
      _projectProvider.test(bytes, name);
    }
}

flutter-制作http request

import 'dart:developer';
// ignore: depend_on_referenced_packages
import 'package:http_parser/http_parser.dart';

import 'package:dio/dio.dart';

class ProjectProvider {
  // * constructor
  ProjectProvider() : _dio = Dio();

  // * dio
  late Response _response;
  late final Dio _dio;

  // * rest api
  final _baseUrl = "http://127.0.0.1:3000";

  test(List<int> bytes, String name) async {
    String extension = name.split(".").last;

    var formData = FormData.fromMap({
      "file": MultipartFile.fromBytes(
        bytes,
        filename: name,
        contentType: MediaType("File", extension),
      ),
    });

    _response = await _dio.post("$_baseUrl/test", data: formData);

    log("test response");
    log(_response.data.toString());
  }
}

nodejs server- multer存储设置

const multer = require("multer");

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, "./files/");
  },
  filename: function (req, file, cb) {
    const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9);
    let originalName = file.originalname;
    let extension = originalName.split(".")[1];
    cb(null, file.fieldname + "-" + uniqueSuffix + "." + extension);
  },
});

const upload = multer({ storage: storage });

nodejs服务器 - 发布请求处理程序

app.route("/test").post(upload.single("file"), function (req, res) {
    res.send(req.file);
});

PACKAGES REQUIRED

FLUTTER SIDE:

  1. Dio
  2. File Picker

NODEJS SIDE:

  1. Multer

FLUTTER - PICK A FILE

test() async {
    // * Pick a File
    FilePickerResult? result = await FilePicker.platform.pickFiles();

    if (result != null) {
      // * cast it to bytes
      List<int> bytes = result.files.single.bytes!.cast();
      // * Get its name, will use it later.
      var name = result.files.single.name;
      // * Send it to method that will make HTTP request.
      _projectProvider.test(bytes, name);
    }
}

FLUTTER - MAKE A HTTP REQUEST

import 'dart:developer';
// ignore: depend_on_referenced_packages
import 'package:http_parser/http_parser.dart';

import 'package:dio/dio.dart';

class ProjectProvider {
  // * constructor
  ProjectProvider() : _dio = Dio();

  // * dio
  late Response _response;
  late final Dio _dio;

  // * rest api
  final _baseUrl = "http://127.0.0.1:3000";

  test(List<int> bytes, String name) async {
    String extension = name.split(".").last;

    var formData = FormData.fromMap({
      "file": MultipartFile.fromBytes(
        bytes,
        filename: name,
        contentType: MediaType("File", extension),
      ),
    });

    _response = await _dio.post("$_baseUrl/test", data: formData);

    log("test response");
    log(_response.data.toString());
  }
}

NODEJS SERVER - MULTER STORAGE SETTINGS

const multer = require("multer");

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, "./files/");
  },
  filename: function (req, file, cb) {
    const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9);
    let originalName = file.originalname;
    let extension = originalName.split(".")[1];
    cb(null, file.fieldname + "-" + uniqueSuffix + "." + extension);
  },
});

const upload = multer({ storage: storage });

NODEJS SERVER - POST REQUEST HANDLER

app.route("/test").post(upload.single("file"), function (req, res) {
    res.send(req.file);
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文