使用 ajax 获取通过 FTP 上传的文件的文件大小 - 试图防止 ajax 中断自身

Posted

技术标签:

【中文标题】使用 ajax 获取通过 FTP 上传的文件的文件大小 - 试图防止 ajax 中断自身【英文标题】:Using ajax to get file size on file being uploaded via FTP - trying to prevent ajax from interrupting itself 【发布时间】:2015-03-30 22:56:10 【问题描述】:

我正在尝试使用 ajax 调用检查 FTP 上传的文件的进度,该调用重复回显 bat 文件的输出,该文件在上传时检查文件的大小。也就是说,我试图确保一旦通过 UNC 路径发送了 ajax 请求,它就不会被另一个中断,因此是 .done 和 .fail。

这在应用程序被转移到 UNC 路径之前已经工作,但现在尽管 ajax“成功”我仍然没有得到任何响应。

当我手动尝试 bat 文件时,它可以工作,但需要一段时间(我相信 10 到 15 秒左右)才能运行,这导致我认为我在 ajax 发送另一个调用时遇到了问题,而前一个调用没有还没完。

我试图通过在 ajax 请求中使用 .done 和 .fail 来解决这个问题,但我显然遗漏了一些东西。如果有人能指出我正确的方向或向我解释我哪里出错了,我将不胜感激!感谢您的帮助!

代码示例:

function getSize(f)
        $.ajax(
            url: "php file handling the ajax request",
            type: "POST",
            data: 
                file : encodeURIComponent(f),
                
            )
        .done(function(data)
                console.log("Ajax success");
                var percent = (data / s) * 1000;
                if(Math.round(percent) != 1000)
                    $( "#progressbar" ).progressbar( "option", "value", Math.round(percent) );
                
        )
        .fail(function(data)
            if ( data.responseCode )
              console.log( data.responseCode );
            
            console.log("Ajax failure");
        );
    

截至目前,我收到了“Ajax 成功”控制台消息,但没有在数据中恢复任何内容。

更新 Cornelis 刚刚指出我应该尝试 GET 而不是 POST。这有一个有趣的效果,让我得到 -2 的返回响应,而不是什么都没有。进步!!

【问题讨论】:

由于您收到“成功”消息,表明您的 AJAX 正在运行,因此服务器端脚本可能没有返回您期望的内容。无论如何,这是一种笨拙的做事方式。您可以将事件侦听器添加到 Ajax 'onprogress' 事件并直接从中获取进度 - 无需服务器调用。 我不知道这可以处理通过 FTP 从客户端机器上传到服务器的文件。我一定是看错了什么。 不 - 我误读了你的问题。它不适用于 FTP。这就引出了一个问题:为什么不通过 HTTP 使用 Ajax 帖子传输文件? 我对第二个大声笑感到非常兴奋。因为我正在尝试为已经启​​动并运行并且已经有点混乱的芽修复一些东西。试图在这个巨大的纸牌屋中尽可能少地改变一些事情。 【参考方案1】:

尝试使用 GET 而不是 POST

function getSize(f)
        $.ajax(
            url: "php file handling the ajax request",
            type: "GET",
            data: 
                file : encodeURIComponent(f),
                
            )
        .done(function(data)
                console.log("Ajax success");
                var percent = (data / s) * 1000;
                if(Math.round(percent) != 1000)
                    $( "#progress_" + id ).progressbar( "option", "value", Math.round(percent) );
                
        )
        .fail(function(data)
            if ( data.responseCode )
              console.log( data.responseCode );
            
            console.log("Ajax failure");
        );
    

【讨论】:

而这种变化会产生什么不同? 好吧,我现在得到的是 -2 而不是什么都没有,哈哈。所以它的进步! @gv0000 您要获取的数据在哪里?您能否快速举例说明数据。 数据来自 bud 的员工,该员工通过此应用程序将其上传到服务器。可以是从 pdf 到视频采访的任何内容。在他决定切换到 UNC 路径之前它运行良好,但现在运行需要相当长的时间。

以上是关于使用 ajax 获取通过 FTP 上传的文件的文件大小 - 试图防止 ajax 中断自身的主要内容,如果未能解决你的问题,请参考以下文章

Delphi - Indy idFTP控件实现文件的上传和下载

在没有 AJAX 的情况下获取文件上传状态

HTML5多文件上传:通过AJAX一一上传

使用带有 SSIS 的 FTP 上传文件

如何显示上传到我的 ftp 文件夹的图像

使用 ajax 通过签名的 url 将文件上传到谷歌云存储