CakePhp 上传多张图片
CakePhp uploading multiple images
我正在尝试保存从表单收到的多输入文件。但是结构不是我所期望的...这是结构:
Array
(
[files] => Array
(
[name] => Array
(
[0] => 25th birthday.PNG
[1] => 1535UDEM-info-2011.jpg
[2] => 2012-06-11 14.49.48.jpg
[3] =>
)
[type] => Array
(
[0] => image/png
[1] => image/jpeg
[2] => image/jpeg
[3] =>
)
[tmp_name] => Array
(
[0] => /tmp/php0GW7d6
[1] => /tmp/phpwzS0DO
[2] => /tmp/phpMifC4w
[3] =>
)
[error] => Array
(
[0] => 0
[1] => 0
[2] => 0
[3] => 4
)
[size] => Array
(
[0] => 159487
[1] => 528765
[2] => 822193
[3] => 0
)
)
)
cakephp可以保存这种类型的数组吗?如果是这样,如何?我使用 http://cakephp-upload.readthedocs.org 这个插件来上传图片。我想我必须一个一个地保存,但我不确定如何保存。我正在尝试使用以下代码重命名每张图片:
foreach ($imageFiles['name'] as $key => $value) {
if(!empty($value))
{
$file = $imageFiles['url']; //put the data into a var for easy use
$ext = substr(strtolower(strrchr($file['name'], '.')), 1); //get the extension
$randomCode = substr(md5(uniqid(rand(), true)), 5, 5);
$imageFiles['url']['name'] = date('Y-m-d')."_".$randomCode.".".$ext;
} else {
$imageFiles['url'] = "";
}
}
有人可以给我一些建议吗?
上传图片或文件的更好解决方案是 Dropzone.js。它非常好用且易于使用,还包括 PHP 用于上传。
But the structure is not what I expected
你期待什么? "normal" 结构?您需要对数组进行规范化,当然不必,但是对其进行规范化会使使用它变得容易得多,您可以只执行一个 foreach 并以相同的方式保存每个文件,无论是否存在一个或多个文件。
见https://github.com/burzum/cakephp-file-storage/blob/3.0/src/Lib/FileStorageUtils.php
/**
* Method to normalize the annoying inconsistency of the $_FILE array structure
*
* @link http://www.php.net/manual/en/features.file-upload.multiple.php#109437
* @param array $array
* @return array Empty array if $_FILE is empty, if not normalize array of Filedata.{n}
*/
public static function normalizeGlobalFilesArray($array = null) {
if (empty($array)) {
$array = $_FILES;
}
$newfiles = array();
if (!empty($array)) {
foreach ($array as $fieldname => $fieldvalue) {
foreach ($fieldvalue as $paramname => $paramvalue) {
foreach ((array)$paramvalue as $index => $value) {
$newfiles[$fieldname][$index][$paramname] = $value;
}
}
}
}
return $newfiles;
}
我正在尝试保存从表单收到的多输入文件。但是结构不是我所期望的...这是结构:
Array
(
[files] => Array
(
[name] => Array
(
[0] => 25th birthday.PNG
[1] => 1535UDEM-info-2011.jpg
[2] => 2012-06-11 14.49.48.jpg
[3] =>
)
[type] => Array
(
[0] => image/png
[1] => image/jpeg
[2] => image/jpeg
[3] =>
)
[tmp_name] => Array
(
[0] => /tmp/php0GW7d6
[1] => /tmp/phpwzS0DO
[2] => /tmp/phpMifC4w
[3] =>
)
[error] => Array
(
[0] => 0
[1] => 0
[2] => 0
[3] => 4
)
[size] => Array
(
[0] => 159487
[1] => 528765
[2] => 822193
[3] => 0
)
)
)
cakephp可以保存这种类型的数组吗?如果是这样,如何?我使用 http://cakephp-upload.readthedocs.org 这个插件来上传图片。我想我必须一个一个地保存,但我不确定如何保存。我正在尝试使用以下代码重命名每张图片:
foreach ($imageFiles['name'] as $key => $value) {
if(!empty($value))
{
$file = $imageFiles['url']; //put the data into a var for easy use
$ext = substr(strtolower(strrchr($file['name'], '.')), 1); //get the extension
$randomCode = substr(md5(uniqid(rand(), true)), 5, 5);
$imageFiles['url']['name'] = date('Y-m-d')."_".$randomCode.".".$ext;
} else {
$imageFiles['url'] = "";
}
}
有人可以给我一些建议吗?
上传图片或文件的更好解决方案是 Dropzone.js。它非常好用且易于使用,还包括 PHP 用于上传。
But the structure is not what I expected
你期待什么? "normal" 结构?您需要对数组进行规范化,当然不必,但是对其进行规范化会使使用它变得容易得多,您可以只执行一个 foreach 并以相同的方式保存每个文件,无论是否存在一个或多个文件。
见https://github.com/burzum/cakephp-file-storage/blob/3.0/src/Lib/FileStorageUtils.php
/**
* Method to normalize the annoying inconsistency of the $_FILE array structure
*
* @link http://www.php.net/manual/en/features.file-upload.multiple.php#109437
* @param array $array
* @return array Empty array if $_FILE is empty, if not normalize array of Filedata.{n}
*/
public static function normalizeGlobalFilesArray($array = null) {
if (empty($array)) {
$array = $_FILES;
}
$newfiles = array();
if (!empty($array)) {
foreach ($array as $fieldname => $fieldvalue) {
foreach ($fieldvalue as $paramname => $paramvalue) {
foreach ((array)$paramvalue as $index => $value) {
$newfiles[$fieldname][$index][$paramname] = $value;
}
}
}
}
return $newfiles;
}