Magento 为什么图像是通过我的自定义模块的管理面板上传的,文件名是Array?

Magento 为什么图像是通过我的自定义模块的管理面板上传的,文件名是Array?,magento,Magento,这是我的BrandController.php 我已经查看了我的自定义模块的所有文件,并将它们与自定义模块制造商提供的文件进行了比较,没有发现太多差异。您是否正在尝试上载多个文件?如果使用具有相同名称的多个fileupload元素,则会得到一个项目数组 所以当调用下面的行时 //this way the name is saved in DB $data['filename'] = $_FILES['filename']['name']; 它将有价值 ["name"]=>array(2

这是我的BrandController.php


我已经查看了我的自定义模块的所有文件,并将它们与自定义模块制造商提供的文件进行了比较,没有发现太多差异。

您是否正在尝试上载多个文件?如果使用具有相同名称的多个fileupload元素,则会得到一个项目数组

所以当调用下面的行时

//this way the name is saved in DB
$data['filename'] = $_FILES['filename']['name'];
它将有价值

["name"]=>array(2) {
      [0]=>string(9)"file0.txt"
      [1]=>string(9)"file1.txt"
}

您需要更新代码以循环遍历每个$_文件['filename']['name'],并分别上载和保存文件

通常文件上传将以数组格式返回。这样每个上传的文件都会有诸如名称、类型、大小、临时名称、错误等信息。您可以使用打印功能(打印($\u文件))获取文件信息。因此,如果要显示文件名,必须使用类似以下内容的内容$\u FILES['filename']['name']

使用打印功能和调试工具,然后使用循环保存文件信息


有关更多信息,请查看。

您可能在不知不觉中上载了多个文件。如果您不打算这样做,您可以在HTML中检查您的标签,并检查标签的name属性。它必须是一个数组(如下所示)

如果不知道将print_r()函数放在何处,可以将其放在该文件的第56行之后

如果在ajax函数中调用saveAction(),则需要记录ajax响应。假设您使用的是jquery

$ajaxResponse = $.POST({...});
console.log($ajaxResponse.responseText);
然后,您可以在浏览器的控制台中查看它。如果没有显示任何内容,则可以使用非异步请求

$ajaxResponse = $.POST({
    // your options,
    // your another option,
    async: FALSE
});

您没有设置表单的enctype,因此图像将永远不会被发送。将代码更新为

$form = new Varien_Data_Form(array( 'enctype' => 'multipart/form-data'));

您如何在模板(即代码)中显示它?当你卸载它时,它显示了什么?我只是显示数据库中的值,它是
Array
,但我只上传了1个图像,而不是2个。把
打印\u r
放在第56行后面没有任何作用。把它放在前面怎么样?我把它放在前面,它成功了。谢谢我已经猜到一半了。我必须将
filename
更改为
imagepath
,以匹配表单字段的名称。现在图像上传到它应该上传的文件夹中,这是一个改进。我的新问题是,第84行没有按应有的方式保存文件名,只是说
Array
$ajaxResponse = $.POST({...});
console.log($ajaxResponse.responseText);
$ajaxResponse = $.POST({
    // your options,
    // your another option,
    async: FALSE
});
$form = new Varien_Data_Form(array( 'enctype' => 'multipart/form-data'));