You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用如何实现对SMB服务器的读写操作

Flutter实现SMB服务器读写操作方案

问题原因说明

SMB属于独立的局域网文件共享协议,和HTTP/HTTPS协议栈完全不兼容,因此你用Dio、HTTP包这类HTTP客户端是无法发起SMB请求的,之前的测试代码逻辑从底层协议层面就不成立。

实现方案

1. 引入适配的SMB依赖

当前Flutter生态中可直接使用flutter_smb2包,支持SMB2、SMB3协议,可覆盖绝大多数家用、商用SMB服务器的连接需求,同时支持Android、iOS、Windows、macOS平台。
你需要先在pubspec.yaml中添加依赖:

dependencies:
  flutter_smb2: ^latest_version

2. 基础操作示例代码

2.1 连接SMB服务器并认证

import 'package:flutter_smb2/flutter_smb2.dart';

Future<void> connectSMB() async {
  final smbClient = FlutterSmb2();
  try {
    // 填入服务器配置参数
    await smbClient.connect(
      host: '192.168.1.30',
      username: 'username',
      password: 'password',
      shareName: '共享文件夹名称', // 必填,对应SMB服务器上开放的共享文件夹名
      domain: '', // 无域配置可留空
    );
    debugPrint('SMB连接成功');
  } catch (e) {
    debugPrint('连接失败: $e');
  } finally {
    // 业务结束后断开连接释放资源
    await smbClient.disconnect();
  }
}

2.2 读取共享文件内容

Future<Uint8List?> readSMBFile(FlutterSmb2 client, String filePath) async {
  try {
    // filePath为共享文件夹下的相对路径,例如'documents/note.txt'
    final fileBytes = await client.readFile(filePath);
    return fileBytes;
  } catch (e) {
    debugPrint('读取文件失败: $e');
    return null;
  }
}

2.3 写入文件到SMB服务器

Future<bool> writeSMBFile(FlutterSmb2 client, String targetPath, Uint8List content) async {
  try {
    await client.writeFile(targetPath, content);
    return true;
  } catch (e) {
    debugPrint('写入文件失败: $e');
    return false;
  }
}

注意事项

  • 连接SMB服务器时必须填写正确的共享文件夹名称,无法直接请求服务器根路径
  • Android平台需要申请局域网访问权限,iOS需要配置NSLocalNetworkUsageDescription权限
  • 如果你的SMB服务器仅支持SMB1协议,可以选用smb_client包适配,但SMB1协议安全性极低,建议优先升级服务器协议版本

内容的提问来源于stack exchange,提问作者Federico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:45:05