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

Flutter中ftpconnect上传图片后分辨率异常/失真问题求助

解决Flutter ftpconnect上传图片失真问题

问题分析

代码能成功上传文件但图片出现分辨率降低或失真,核心原因大概率是FTP传输模式错误(默认ASCII模式会破坏二进制图片文件结构),或是上传的并非原始图片文件。

解决步骤

1. 强制设置FTP二进制传输模式

FTP默认使用ASCII模式传输文本内容,图片属于二进制文件,必须切换到二进制模式才能保证文件完整性。在connect()之后添加二进制模式设置:

try {
  File fileToUpload = File(filePathPharmacy);

  await ftpConnect.connect();
  // 关键操作:切换至二进制传输模式
  await ftpConnect.setBinaryType(); 
  await ftpConnect.changeDirectory(
      "/public_html/XXXXXX/XXXXXX/main/assets/userImags");

  bool res =
      await ftpConnect.uploadFileWithRetry(fileToUpload, pRetryCount: 3);
  await ftpConnect.disconnect();
  print(res);
} catch (w) {
  print("error : $w");
}

注:若setBinaryType()方法不存在,可查看ftpconnect库对应版本的文档,使用等价的二进制设置方法,比如部分版本为ftpConnect.setType(FtpType.binary)

2. 确认上传的是原始图片文件

检查filePathPharmacy指向的文件是否为未压缩的原始图片:

  • 直接打开本地路径对应的图片,确认分辨率和画质本身无问题
  • 若图片来自相机拍摄,需确保获取的是原图路径而非系统自动生成的缩略图(部分相机API会默认返回压缩后的临时文件路径)

3. 验证文件传输完整性

上传后对比本地文件与服务器文件的MD5哈希值,确认文件是否完整传输:

  • 计算本地文件MD5的示例代码:
import 'dart:convert';
import 'dart:io';
import 'package:crypto/crypto.dart';

Future<String> calculateMD5(File file) async {
  final stream = file.openRead();
  final hash = await md5.bind(stream).first;
  return hex.encode(hash.bytes);
}
  • 下载服务器上的目标文件,计算相同的MD5值并对比。若不一致,说明传输过程存在丢包,可尝试增加重试次数或检查网络稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:25:22