环境:FluentFTP作为客户端,windows 10自带的IIS ftp作为服务器。
重要参数设置:服务器上保留部分上载(keepPartialUploads)参数,我设置为了false。
实验1:在上传一张图片过程中,我手动停止ftp server,
此时会发现,已经上传的部分文件会自动被删除,不被保留。
实验2:在上传一张图片过程中,我直接拔掉网线,却发现已经上传的部分文件没有被自动删除,在文件夹下依然能看到这不完整的文件。
实验2的结果不符合预期,大家有碰到过么,我不希望这种不完整的文件还依然保留着,此外有什么办法或者其它的ftp服务器工具可供选择,使得这种上传不完整的文件不被保留。谢谢!
根据您描述的情况,实验1和实验2的表现确实有所不同。在使用IIS FTP时,如果keepPartialUploads参数设置为false,它会删除不完整的文件。但对于实验2,不完整的文件却没有被删除。这可能是由于网络断开时,IIS FTP无法及时检测到客户端的中止,因此并没有删除不完整的文件。
为了避免这种情况,您可以尝试使用其他FTP服务器工具,比如FileZilla Server,它可以通过设置来禁用保存不完整的上传文件,从而确保文件没有被保留。另外,您也可以尝试更改FTP客户端的keepPartialUploads参数设置,或者在上传文件时设置一个较小的超时时间,以确保及时检测到中止。希望这些方法能够对您有所帮助。
该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据您的描述,似乎您在使用IIS FTP服务器时遇到了keepPartialUploads参数设置无法正常工作的问题。实验2的结果似乎表明该参数设置并没有生效。
如果您不希望保留上传不完整的文件,可以尝试使用另外一些FTP服务器软件,例如FileZilla Server、ProFTPD等。这些软件通常都有可配置的选项,可以控制上传不完整文件的行为。
·
另外,如果您坚持使用IIS FTP服务器,您可以尝试升级您的IIS版本,或者尝试升级IIS FTP服务器的补丁程序。也许这些更新可以修复keepPartialUploads参数设置无法正常工作的问题。
·
最后,您也可以考虑使用其他的文件传输协议,例如SFTP或SCP。这些协议使用SSH进行加密传输,具有更高的安全性和可靠性,并且不会产生上传不完整的文件。
参考GPT和自己的思路:根据IIS FTP的官方文档,keepPartialUploads参数的作用是控制服务器在接收到部分上传文件时的行为。当该参数设置为true时,服务器将保存部分上传文件,并等待后续上传的部分。而当该参数设置为false时,服务器将删除部分上传文件并返回错误消息。
根据你的实验结果,手动停止FTP服务器和拔掉网线这两种情况下,keepPartialUploads参数的行为确实有所不同。手动停止FTP服务器时,服务器会删除部分上传的文件,而拔掉网线时,部分上传的文件却没有被自动删除。
这可能是因为在FTP客户端和服务器之间的连接被突然中断时,服务器无法判断上传是否已经完成,因此无法自动删除部分上传的文件。
针对这个问题,你可以尝试使用其他FTP服务器工具,例如FileZilla Server等,看看是否能满足你的需求。此外,你还可以考虑在FTP客户端上实现自动删除部分上传文件的功能,例如在上传完成后检查文件是否完整,如果不完整则删除。
你可以在上传完成后,使用FTP客户端的命令检查文件是否完整,并根据检查结果决定是否删除部分上传的文件。以下是一个示例代码,演示如何使用FluentFTP客户端实现自动删除部分上传文件的功能:
using (var ftpClient = new FtpClient("ftp.example.com"))
{
ftpClient.Credentials = new NetworkCredential("username", "password");
// 在这里添加你的文件上传代码
// 检查文件是否完整
var remoteFileInfo = ftpClient.GetObjectInfo("/path/to/uploaded/file");
if (remoteFileInfo.Size != localFileInfo.Length)
{
// 如果文件不完整,则删除部分上传的文件
ftpClient.DeleteFile("/path/to/uploaded/file");
}
}
在这个示例中,我们首先使用FluentFTP连接到FTP服务器,并上传文件。然后,我们使用GetObjectInfo方法获取已上传文件的信息,包括文件大小。如果远程文件的大小与本地文件大小不同,则表示文件不完整。在这种情况下,我们使用DeleteFile方法删除部分上传的文件。
参考GPT和自己的思路,根据你提供的信息,FluentFTP 客户端在使用 Windows 10 自带的 IIS FTP 服务器时,在上传中断后,已经上传的部分文件有时会被删除,但有时却会保留。这可能是由于不同的中断方式导致的不同行为。当你手动停止 FTP 服务器时,会触发服务器的正常关闭过程,而上传的部分文件会被删除。而在拔掉网线的情况下,服务器不会收到任何关闭的信号,因此已经上传的部分文件可能不会被删除。
如果你不希望保留不完整的文件,你可以使用 FluentFTP 提供的一些参数来控制上传的行为。例如,你可以设置 FtpDataConnectionType 参数为 FtpDataConnectionType.EPSV,以确保数据连接是基于 EPSV 命令的,这有助于减少上传中断时不完整文件的保留。此外,你还可以考虑使用其他的 FTP 服务器软件,例如 FileZilla Server、vsftpd 等。
不过,请注意,有些 FTP 客户端在上传文件时,会首先将文件上传到一个临时文件夹中,等待上传完成后再将文件移动到目标文件夹中。在这种情况下,即使服务器在上传过程中断开,已经上传的部分文件也会被保留在临时文件夹中,直到上传完成或客户端手动删除。因此,你需要仔细了解你所使用的 FTP 客户端和服务器的工作原理,才能更好地控制文件的上传和保留行为。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据您的描述,IIS FTP的keepPartialUploads参数设置为false应该是没有问题的。不过,有时候在上传不完整的文件时,可能会出现文件没有被自动删除的情况。
这个问题可能和IIS FTP的实现有关,建议您可以考虑尝试其他的FTP服务器工具,例如FileZilla Server或ProFTPD等,看看是否可以解决这个问题。
以下是一个使用FluentFTP上传文件的简单示例代码,供您参考:
using (var ftp = new FtpClient("ftp.example.com", "username", "password"))
{
ftp.Connect();
using (var fileStream = File.OpenRead("localfile.png"))
{
ftp.Upload(fileStream, "/remotefile.png");
}
ftp.Disconnect();
}
注意事项:
希望对您有帮助!
如果我的回答解决了您的问题,请采纳!