ftp上传文件失败,长传文件大小为零字节!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ftp上传文件失败,长传文件大小为零字节!相关的知识,希望对你有一定的参考价值。

ftp软件flashFXP,上传同名文件,提示426错误 上传失败 然后远程服务器端会出现大小为零字节的同名文件,删除重新上传也不好使,重新链接上传也不好使。使用其他ftp软件上传也不好使,尝试了cuteftp和filezilla。但是等过一段时间自己又好使了,使用其他电脑上传也没有问题。我是win7系统,在网上百度谷歌过了,没有好的解决办法,希望有大神提供下解决方案,和问题出现的原因,感激不尽了。

上传时出现同名零字节的文件,应该是服务器端建立了一个临时文件准备接收数据,但是出现错误,就无法上传了。此时FTP客户端和服务器建立的tcp网络连接还在,服务器端仍然在等待客户端上传数据,在等待一段时间收不到数据以后,服务器端才会关闭这个链接,同时删掉临时文件,在这段时间内你用什么FTP程序上传都会出错,因为服务器端的临时文件还在,无法新建同名文件,服务器还在等你写入上一次的数据到最初的临时文件。

过了一段时间后,服务器等不到你的数据,关闭了最初的有错误的连接,删掉了临时文件,你再上传,就没问题了,就可以上传成功,因为可以再次新建一个临时文件了。这就是你看到的这个错误的原理。只要以后你上传没出错,应该不会再出现问题,如果还出问题,就建议联系FTP服务器的管理员协助你处理。

由于不同FTP服务器处理方式不同,我给出的只是一种可能的原理,并不一定就是你这个错误的实际情况,如果有其他新的情况可以继续追问,帮你继续分析。追问

嗯,我觉得你的分析很有道理,ftp服务器端是另一个同事用serv-u管理的,他那边的具体情况我也不是很了解,他说他那边没什么问题,而且他上传东西很正常没有出现过问题。关键是我电脑出现上传错误的频率也太高了,而且到底是什么原因总是导致上传出现错误的那?

追答

查了一下serv-U的426错误,原来是列表错误,这种错误比较常见,一般是在客户端与服务器连接出现问题的时候经常见到的。FTP服务器一般用到两个端口,默认的21端口用来做控制连接,20端口用来做数据连接用,经常有些人只在做服务器时本机防火墙允许了21端口,而没有放行20端口。而且FTP还有主动模式与被动模式的区别,不同方向主动发起连接时,用到的端口可能是随机的,此时你的电脑或者对方的电脑上如果有防火墙,或者网络中间有硬件防火墙,在访问规则没设置好的情况下就会造成你提出的这种问题,如果防火墙都关掉,或者放行所有端口,相信应该就没事了。

参考技术A 重启电脑 建立新连接 或者换个名字 在试试 参考技术B 也可能是远程服务器空间不足呢~

VirusTotal 上传的文件为零字节

【中文标题】VirusTotal 上传的文件为零字节【英文标题】:VirusTotal Uploaded File is Zero Bytes 【发布时间】:2020-06-08 20:36:18 【问题描述】:

我正在尝试使用 .Net Core 将文件上传到 VirusTotal。但上传的文件大小为零字节。为什么会发生这种情况?

[Route("api/[controller]")]
public class ScannerController : Controller
   [HttpGet]         
    public async Task<VirusTotalNet.Results.FileReport> ScanAsync(string file_id)
    
        file_id = "./wwwroot/Upload/node-v12.14.1-x64.msi";
        VirusTotal virusTotal = new VirusTotal("");
        // virusTotal.UseTLS = true;         
        FileStream stream = System.IO.File.OpenRead(file_id);
        byte[] fileBytes = new byte[stream.Length];
        stream.Read(fileBytes, 0, fileBytes.Length);

        VirusTotalNet.Results.FileReport report = await virusTotal.GetFileReportAsync(stream);

        return report;
    

【问题讨论】:

你能在stream.read之前试试stream.Seek(0, SeekOrigin.Begin)吗? @DervişKayımbaşıoğlu 试过了.. 又是同样的问题virustotal.com/gui/file/… @DervişKayımbaşıoğlu,如果它被插入到报告行之前,它应该可以按您的预期工作...... 【参考方案1】:

您已将整个文件读入byte[],并且GetFileReportAsync 的重载将占用该文件,因此将参数从stream 更改为fileBytes

VirusTotalNet.Results.FileReport report = await virusTotal.GetFileReportAsync(fileBytes);

Derviş Kayımbaşıoğlu 建议重置流的位置,但事实证明提到的位置不正确。以下任一:

stream.Seek(0L, SeekOrigin.Begin);

// or

stream.Position = 0L;

需要在调用GetFileReportAsync 之前立即完成,之后文件已被读取,而不是之前。那会奏效的。

但是等等,还有更多!

无需将文件读入fileBytes,即无需重置位置。流可以打开并直接传递给GetFileReportAsync。包括适当的资源处理,整个方法变成这样:

[HttpGet]         
public async Task<VirusTotalNet.Results.FileReport> ScanAsync(string file_id)

    file_id = "./wwwroot/Upload/node-v12.14.1-x64.msi";
    VirusTotal virusTotal = new VirusTotal("");
    // virusTotal.UseTLS = true;      

    using (FileStream stream = System.IO.File.OpenRead(file_id))
    
        VirusTotalNet.Results.FileReport report = await virusTotal.GetFileReportAsync(stream);

        return report;
    

这允许异步读取文件和写入套接字,并且可以缓冲少量数据,因此不必将大文件完全加载到内存中。

【讨论】:

以上是关于ftp上传文件失败,长传文件大小为零字节!的主要内容,如果未能解决你的问题,请参考以下文章

为啥FTP上传的文件是0字节,FTP上传文件0字节的解决办法

使用FTP登陆上传ASP文件怎么大小变为0了?

ftp上传的文件为0kb怎么办

使用 C# 将文件上传到 FTP

FileZilla FTP上传大一点的文件失败

节点强大的创建大小为零字节的不必要文件