搜索插件、代码仓与 APP 分类

插件详情v3.0.0

ftpconnect

简单且可靠的 Dart FTP 连接库,用于与 FTP 服务器交互。

AndroidiOSmacOSWindowsLinux
近 30 天下载
9470
喜欢数
141
Pub 分数
150

安装插件

flutter pub add ftpconnect

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个简单且可靠的 Dart 库,用于连接 FTP 服务器,实现跨多个平台的无缝文件传输。它提供了一个简单的 API 来与远程 FTP 服务器交互,支持常见的操作,如上传、下载、列出文件和管理目录。设计注重可靠性和易用性,可无缝集成到针对 Android、iOS、macOS、Windows 和 Linux 的 Flutter 应用中。非常适合需要通过 FTP 实现安全或自动化的文件处理的应用。

适合场景

  • 应用与FTP服务器之间的文件传输
  • 自动备份系统
  • 应用中的远程文件管理
  • 同步应用数据到FTP存储
  • 从FTP下载配置文件

主要特点

  • 跨平台支持
  • 简单直观的 API
  • 强大的错误处理
  • 支持文件上传/下载
  • 目录列表和导航

适合对象

  • 开发文件同步应用的开发者
  • 需要远程文件访问的应用程序
  • 使用FTP的后端服务
  • 通过FTP管理文件的物联网设备
  • 网络协议的教育项目

使用建议

  • 需要稳定的互联网连接
  • 无内置加密(如需请使用FTPS)
  • 仅限FTP协议
  • 可能需要防火墙配置
  • 在没有额外措施的情况下,不适合高安全环境

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

Flutter FTP Connect

Flutter simple and robust dart FTP Connect Library to interact with FTP and SFTP Servers.

Key Features • Examples • Parameters • SFTP Support • License

Key Features

  • Supports SFTP/FTP/FTPS/FTPES
  • Upload files to the server
  • Download files/directories from the server
  • List directory contents
  • Manage files (rename/delete) and directories (create/delete)
  • Completely asynchronous functions

This library is originally based on dart_ftpclient, which has not been updated in years.

Example upload file

Example 1:
import 'dart:io';
import 'package:ftpconnect/ftpconnect.dart';

main() async{
    FTPConnect ftpConnect = FTPConnect('example.com',user:'user', pass:'pass');
    File fileToUpload = File('fileToUpload.txt');
    await ftpConnect.connect();
    bool res = await ftpConnect.uploadFile(fileToUpload);
    await ftpConnect.disconnect();
    print(res);
}
Example 2: step by step
import 'dart:io';
import 'package:ftpconnect/ftpconnect.dart';

main() async{
  FTPConnect ftpConnect = FTPConnect('example.com',user:'user', pass:'pass');
 try {
      File fileToUpload = File('fileToUpload.txt');
      await ftpConnect.connect();
      await ftpConnect.uploadFile(fileToUpload);
      await ftpConnect.disconnect();
    } catch (e) {
      //error
    }
}

Download file

Example 1:
import 'dart:io';
import 'package:ftpconnect/ftpconnect.dart';

main() async{
    FTPConnect ftpConnect = FTPConnect('example.com',user:'user', pass:'pass');
    String fileName = 'toDownload.txt';
    await ftpConnect.connect();
    bool res = await ftpConnect.downloadFile(fileName, File('myFileFromFTP.txt'));
    await ftpConnect.disconnect();
    print(res);
}
Example 2: step by step
import 'dart:io';
import 'package:ftpconnect/ftpconnect.dart';

main() async {
  FTPConnect ftpConnect = FTPConnect('example.com',user:'user', pass:'pass');
 try {
      String fileName = 'toDownload.txt';
      await ftpConnect.connect();
      await ftpConnect.downloadFile(fileName, File('myFileFromFTP.txt'));
      await ftpConnect.disconnect();
    } catch (e) {
      //error
    }
}

Other Features

Directory functions:
//Get directory content
ftpConnect.listDirectoryContent();

//Create directory
ftpConnect.makeDirectory('newDir');

//Change directory
ftpConnect.changeDirectory('moveHereDir');

//get current directory
ftpConnect.currentDirectory();

//Delete directory
ftpConnect.deleteDirectory('dirToDelete');

//Delete a non-empty directory (recursively)
ftpConnect.deleteNonEmptyDirectory('dirToDelete');

//check for directory existance
ftpConnect.checkFolderExistence('dirToCheck');

//create a directory if it does not exist
ftpConnect.createFolderIfNotExist('dirToCreate');

//Upload a local directory recursively to the server
ftpConnect.uploadDirectory(Directory('localDir'), 'remoteDir');

//Download a remote directory recursively
ftpConnect.downloadDirectory('remoteDir', Directory('localDir'));
File functions:
//rename file
ftpConnect.rename('test1.txt', 'test2.txt');

//file size
ftpConnect.sizeFile('test1.txt');

//file existence
ftpConnect.existFile('test1.txt');

//delete file
ftpConnect.deleteFile('test2.zip');

//upload in-memory bytes (no local file needed)
ftpConnect.uploadData(Uint8List.fromList([1, 2, 3]), 'remote.bin');

//download a remote file into memory as bytes
final Uint8List bytes = await ftpConnect.downloadToBytes('remote.bin');

Parameters

Common parameters (FTPConnect and SFTPConnect)
Property Description
host Hostname or IP Address
port Port number (FTP defaults to 21, FTPS to 990, SFTP to 22)
user Username (Defaults to anonymous)
pass Password if not anonymous login
showLog Enable Debug Logging (Defaults to false)
logger Custom logger
timeout Timeout in seconds to wait for responses (Defaults to 30)
FTP-only parameters (FTPConnect)
Property Description
securityType SecurityType.ftp / ftpes / ftps (Defaults to ftp)
SFTP-only parameters (SFTPConnect)
Property Description
privateKey PEM/OpenSSH private key content, used instead of pass
passphrase Passphrase protecting privateKey (if any)
onVerifyHostKey Optional host key verification handler

More details here.

SFTP support

SFTP is provided by the SFTPConnect class, powered by the pure-Dart dartssh2 package. Both FTPConnect and SFTPConnect implement the same FileTransferClient interface, so they share identical method names/signatures and you can swap one for the other by changing only the instantiated class.

ℹ️ dartssh2 is written in pure Dart, so SFTPConnect works on every platform supported by Dart/Flutter (except web, which has no raw TCP sockets).

import 'dart:io';
import 'package:ftpconnect/ftpconnect.dart';

main() async {
  SFTPConnect sftpConnect = SFTPConnect(
    'example.com',
    port: 22,
    user: 'user',
    pass: 'pass',
    showLog: true,
  );

  try {
    await sftpConnect.connect();

    // Upload a file
    File fileToUpload = File('fileToUpload.txt');
    await sftpConnect.uploadFile(fileToUpload);

    // List directory content
    List<FTPEntry> content = await sftpConnect.listDirectoryContent('.');
    print(content);

    // Download a file
    await sftpConnect.downloadFile('toDownload.txt', File('myFile.txt'));

    // Manage files/directories
    await sftpConnect.makeDirectory('newDir');
    await sftpConnect.rename('test1.txt', 'test2.txt');
    await sftpConnect.deleteFile('test2.txt');

    await sftpConnect.disconnect();
  } catch (e) {
    // error
  }
}

Authenticating with a private key instead of a password:

SFTPConnect sftpConnect = SFTPConnect(
  'example.com',
  user: 'user',
  privateKey: '''-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----''',
  passphrase: 'passphrase-for-key',
);

View more Examples

Support

If this plugin was useful to you, helped you to deliver your app, saved you a lot of time, or you just want to support the project, I would be very grateful if you buy me a cup of coffee.

Buy Me A Coffee

License

MIT

所属分类

依赖

依赖清单 3 项

源码仓库

使用此插件的项目

暂无相关数据。