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

使用FormData、AJax和CakePHP上传文件

梁华皓
2023-03-14

这段javascript代码如下所示。注意,当file input元素的值发生变化时(即,一旦他们选择了要上传的文件),就会调用该命令

plugin.fileUpload = function(el)
    {
        el = $(el);

        form = el.closest('form');

        var files = el.get(0).files;

        console.log(files.length)

        var formData = new FormData();

        for (var i = 0; i < files.length; i++) 
        {
            var file = files[i];

            console.log(file);

            formData.append('files[]', file, file.name);
        }

        formData.append("username", "blablabl@gmail.com");

        var xhr = new XMLHttpRequest();

        xhr.open('POST', form.attr('action'), true);

        xhr.onload = function () {
            if (xhr.status === 200) {
                toastr.success('Successfully loaded');
            } 
            else 
            {
                alert('An error occurred!');
            }
        };

        xhr.send(formData);

        console.log(files);
        console.log(formData);
    }

请原谅所有控制台日志。它的目的是显示输出和调试。

您将看到,我还附加了一个username字段,只是为了测试帖子是否在控制器中使用了一些完整的数据。的确是。以下是记录$this->request->data数组的输出:

2014-06-18 17:51:41 Error: RequestsController::upload_files - Line 45
2014-06-18 17:51:41 Error: Array
(
    [username] => blablabl@gmail.com
)
 FileList { 0=File, length=1, item=item(), more...}
FormData { append=append()}

有什么想法吗??

共有1个答案

郎星汉
2023-03-14

啊,这绝对是个陷阱

通过控制器中的FormData访问上传的文件就像访问任何提交表单的PHP脚本中的文件一样。

看来,为了操作这些文件,我需要使用普通的$_files变量来访问它们。

function upload_files()
{
    if($this->request->is('post'))
    {
        CakeLog::write('error', print_r($_FILES, true));
    }
}
2014-06-18 22:13:29 Error: Array
(
    [files] => Array
        (
            [name] => ReadMe.txt
            [type] => text/plain
            [tmp_name] => /tmp/phpOUTn8l
            [error] => 0
            [size] => 3627
        )

)
 类似资料:
  • 本文向大家介绍ajax使用formdata上传文件流,包括了ajax使用formdata上传文件流的使用技巧和注意事项,需要的朋友参考一下 今天在做项目的时候涉及到了ajax上传文件流的问题,由于是移动端两个页面的两个表单使用同一个ajax地址进行上传数据给后台,数据中涉及到了不同类型的input,其中存在了file类型的input,导致无法使用表单序列化直接传输数据。 只存在传递一般的参数时,可

  • 我试图通过使用FormData通过AJAX上传文件。如果我提交AJAX调用而没有选择任何要上传的文件,post工作正常,服务器上接收到其他字段(不是文件上传)。但是,如果我选择一个要上传的文件,调用到达服务器时没有任何数据(在PHP中,$_POST和$_FILES数组都是完全空的)。我知道如果您没有告诉jQuery不要设置contentType可能会发生这种情况,但是我将contentType和p

  • 问题内容: 这是我使用拖放功能动态生成的HTML。 这是我的JavaScript代码: 问题答案: 为了正确使用表格数据,您需要执行2个步骤。 准备工作 您可以将整个表单交给FormData()进行处理 或为FormData()指定确切的数据 发送表格 带有jquery的Ajax请求将如下所示: 之后,它将发送ajax请求,就像您使用 更新:如果没有in选项,该请求将无法工作,因为所有文件都必须通

  • 问题内容: 这是我使用拖放功能动态生成的html。 这是我的js代码… 问题答案: 为了正确使用表格数据,您需要执行2个步骤。 准备工作 您可以将整个表单交给FormData()进行处理 或为FormData()指定确切的数据 发送表格 带有jquery的Ajax请求将如下所示: 之后,它将发送ajax请求,就像您提交常规表格一样 更新:如果没有in选项,该请求将无法工作,因为所有文件都必须通过P

  • 问题内容: 我对jQuery和Ajax函数还比较陌生,但是过去几天一直在使用Ajax表单。我在尝试上传图像时遇到文件上传问题。在寻找资源时,我找不到任何有用的东西,因为它们似乎过于复杂,毫无意义,没有任何解释,这无助于我进一步学习。 我已经编写了以下代码来处理Ajax中的图片上传: 这向文件发送了一个请求,但是没有发送数据,基本上我的表单实际上是这样的: 似乎没有任何数据在标头中传递,我认为我将通

  • 问题内容: 当我使用XMLHttpRequest时,使用可以正确上传文件。但是,当我切换到时,我的代码将中断。 这是有效的原始代码: 这是我失败的尝试: 我究竟做错了什么?如何使用AJAX正确上传文件? 问题答案: 您必须添加方法,以便jQuery不会更改标头或数据(这会破坏当前代码)。