使用FluentFTP上传文件时持续返回文件校验值不匹配错误的求助
FluentFTP上传文件时持续返回文件校验值不匹配错误的求助
我最近在尝试用FluentFTP上传文件,可它一直弹同一个错误,折腾好久都没解决,来这儿求助各位大佬!错误信息如下:
FluentFTP.Exceptions.FtpException HResult=0x80131500
Message=Uploaded file checksum value does not match local file
Source=FluentFTP
StackTrace: at FluentFTP.FtpClient.UploadFileFromFile(String localPath, String remotePath, Boolean createRemoteDir, FtpRemoteExists existsMode, Boolean fileExists, Boolean fileExistsKnown, FtpVerify verifyOptions, Action...
嘿,我之前也踩过这个坑,给你几个亲测有用的排查方向,你可以挨个试:
- 先确认上传时本地文件没被篡改:有时候上传过程中,杀毒软件、同步工具或者其他后台程序会悄悄读写你的本地文件,导致FluentFTP计算本地校验和时,文件已经和上传的版本不一样了。上传前可以先把本地文件设为只读,或者关掉可能访问它的程序试试。
- 核对校验算法是否匹配:不同FTP服务器支持的校验算法可能不一样,比如有的只认MD5,有的支持SHA256。你可以在代码里先调用
client.GetHashAlgorithms()获取服务器支持的算法列表,然后上传时指定对应的算法,示例代码如下:client.UploadFile(localPath, remotePath, verifyOptions: FtpVerify.OnlyChecksum, hashAlgorithm: FtpHashAlgorithm.MD5); - 检查传输模式是否正确:要是你传的是二进制文件(比如压缩包、图片、安装包),但不小心用了ASCII模式,换行符转换会把文件内容搞乱,校验肯定不匹配。上传前一定要指定二进制模式:
client.SetDataType(FtpDataType.Binary); - 手动对比校验和:自己手动计算本地文件的校验值,再登录服务器计算上传后文件的校验值。如果两个值真的不一样,那就是传输时网络波动丢包导致的;如果两个值一致,那大概率是FluentFTP的版本有bug,升级到最新版应该就能解决。
- 临时关闭校验排查问题:要是你想先确认文件能不能传上去,可以把
verifyOptions设为FtpVerify.None跳过校验,看看上传是否正常,这样也能快速定位是不是校验逻辑本身的问题。
备注:内容来源于stack exchange,提问作者GuidoG
相关产品推荐
相关产品推荐

