当前位置: 首页 > 知识库问答 >
问题:

与大型文件传输相关的Camel FTP问题

汪典
2023-03-14
from("sftp://host:22?connectTimeout=30000&username=xxx&password=yyyy&localWorkDirectory=D:/templocation")
.to("file:///D:/mylocation");

我正在寻找以下问题的答案。

>

  • 在服务器断开的情况下,Camel SFPT是否支持resume功能。我注意到,一旦从基础JSCH库抛出SocketTimeout/IOException异常,就会删除.inprogress文件。我的期望是,一旦连接可用,camel应该重新建立连接,并从它离开的地方恢复下载。

    connectTimeout、timeout和soTimeout等参数不起作用。在windows平台(WIN 7)中,如果服务器保持断开连接约21秒,Camel将删除.inprogress文件。camel FTP组件中是否有任何其他参数必须设置以控制使用者超时。问题将是如果文件大小非常大(1 GB或更大),并且当下载超过90%时服务器断开连接。

  • 共有1个答案

    宋高扬
    2023-03-14

    @Clausibsen:非常感谢你的回答。我将非常感谢您对第2点的反馈。

    我浏览了Camel FTP组件源代码,发现SFTPOperations.RetrieveFileTofileInLocalWorkDirectory是实现从JSch库检索数据相关功能的方法。

    代码是这样的,从基础库接收到的任何异常都将导致.inprogress文件被删除,即Channel.get(remoteName,os);。我调查了JSch图书馆,在那里他们有一个简历选项:

    get(String src, OutputStream dst, SftpProgressMonitor monitor, int mode, long skip) 
    Downloads a file to an OutputStream.
    

    我在retrieveFileToFileInLocalWorkDirectory方法中合并了这个API,方法是跟踪是否存在任何.inprogress文件,如果存在,则将其文件化。

    if(fileSize>0)
    {
      channel.get(remoteName, os, progressMonitor, ChannelSftp.RESUME, fileSize    );
    }
    else
    {
     channel.get(remoteName, os, progressMonitor);
    }
    

    ProgressMonitor实现帮助我跟踪下载是否完成。

    fileSize=temp.length();
    boolean isFileDownloadComplete=(fileSize==progressMonitor.getMax());
    if(isFileDownloadComplete)
        rename and move the file.
    

    有了上面的实现并注释掉原始的文件删除行为,下载恢复功能就可以工作了。即使服务器断开,我也能继续下载文件。

     类似资料:
    • 我有一个以输入类型为数字的编辑文本。但是在完成一项任务后,如果我再次单击编辑文本,输入类型将更改为文本。 大约一秒钟后,它会将输入类型显示为数字,很快它就会自动将编辑文本的输入类型更改为文本。即使我点击按键,编辑文本上也不会显示任何内容。 我检查了logcat,我得到了这个: 我检查了这个链接:getExtractedText on inactive InputConnection warning

    • 问题描述 我想将前端获取到的文件通过POST请求作为请求体参数传给后端,但是传过去之后发现文件是个空对象{} 问题出现的环境背景及自己尝试过哪些方法 问过chatgpt和查阅的一些资料后我尝试将File对象转化为Blob对象然后再传给后端,结果发现还是空对象{};之后我又尝试通过FormData来作为POST请求体参数可还是无济于事 相关代码 以下是nodejs后端对路由的统一处理:

    • 问题内容: 我正在尝试设置一个非常基本的html5页面,该页面会加载20MB的.mp4视频。看来,浏览器需要下载整个内容,而不仅仅是播放视频的第一部分并在其余部分进行流传输。 我在搜索时发现的最接近的内容…我尝试了“手刹”和“数据回合”,两者均未发挥作用: 关于如何执行此操作或是否可行的任何想法? 这是我正在使用的代码: 问题答案: 确保moov(元数据)在mdat(音频/视频数据)之前。这也称为

    • 问题内容: 客户端向从服务器发送文件的大小可能大于5G,而不是从服务器发送到主服务器的大小。 从站将临时文件保存到自己吗?我不希望发生这种情况,因为这会降低上载速度并浪费从站的内存。 有什么办法可以避免这种情况?在golang中传输大文件的最佳方法是什么? 问题答案: 是的,有以避免存储-转发方式的标准方式:只要客户端连接从服务器后应该打开到主服务器的连接,然后就 流 从客户那里的数据。通常,这是

    • 本文向大家介绍python:socket传输大文件示例,包括了python:socket传输大文件示例的使用技巧和注意事项,需要的朋友参考一下 文件可以传输,但是对比传输前后的文件:socket_test.txt,末尾有一些不一致服务端代码: 客户端代码:  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

    • 问题 如何流传输大文件? 方案 要流传输大文件,需要添加传输译码(Transfer-Encoding)区块头,这样才能一边下载一边显示。否则,浏览器将缓冲所有数据直到下载完毕才显示。 如果这样写:直接修改基础字符串(例中就是j),然后用 yield 返回--是没有效果的。如果要使用 yield,就要向对所有内容使用 yield。因为这个函式此时是一个生成器。(注:具体细节请查看 yield 文档,