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

时间:2012-12-27 21:01:30

标签: magento

这是我的BrandController.php https://gist.github.com/a958926883b9e7cc68f7#file-brandcontroller-php-L53

我已经浏览了我的自定义模块的所有文件,并将它们与自定义模块制造商提供的文件进行了比较,我找不到太多差异。

4 个答案:

答案 0 :(得分:2)

您是否尝试上传多个文件?如果您使用多个具有相同名称的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"
}

你需要更新代码以循环遍历每个$ _FILES ['filename'] ['name']并分别上传和保存文件。

答案 1 :(得分:2)

您可能在不知不觉中上传了多个文件。如果您不是您的意图,可以在HTML中检查并检查标记的名称属性。它必须是一个数组(如此)。

<input type="file" name="my_files[]" />

如果您只在数据库中看到Array(),则表示您确实正在上传多个文件。您可以使用循环处理它们。

如果您确定要上传1张图片,可以按照@ Palanikumar的建议操作。使用print_r()并显示$ _FILES并将其粘贴到此处。如果您不想使用它,可以使用

json_encode($the-data-you-are-going-to-insert-to-the-database);

如果你不知道把print_r()函数放在哪里,你可以把它放在这个文件的第56行之后。

https://gist.github.com/desbest/a958926883b9e7cc68f7#file-brandcontroller-php-L53

if(isset($_FILES['filename']['name']) && $_FILES['filename']['name'] != '') {
 print_r($_FILES);
 die;

如果在ajax函数内调用saveAction(),则需要记录ajax响应。假设你正在使用jquery ..

$ajaxResponse = $.POST({...});
console.log($ajaxResponse.responseText);

然后,您可以在浏览器的控制台中查看它。如果没有显示任何内容,您可以使用非异步请求

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

答案 2 :(得分:1)

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

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

有关详细信息,请查看here

答案 3 :(得分:0)

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

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