我遇到了一个问题,我可以从一个表单中选择多个文件,但是当我在PHP中检查它时,它仅显示一个文件(但是在我的浏览器的控制台中,它显示两个文件),而没有请勿将文件移动到新位置。我不太确定发生了什么。
这是我的代码:
jQuery:
$('#add-items-submit').on('click', function() {
var store_name = $('#main-store-name').text();
var item_name = $('#add-item-name').val();
var item_price = $('#add-item-price').val();
var item_desc = $('#add-item-desc').val();
var item_num = $('#add-item-number').val();
var formData = new FormData();
formData.append('store_name', store_name);
formData.append('item_name', item_name);
formData.append('item_price', item_price);
formData.append('item_desc', item_desc);
formData.append('item_num', item_num);
if (document.getElementById('add-item-image') == null) {
document.getElementById('add-items-message').value = "Please add an image of the item if you wish to submit it";
}
$.each($('#add-item-image')[0].files, function (i, file) {
formData.append('item_file', file);
});
$.ajax({
type: "POST",
contentType: false,
processData: false,
url: '/user/add-items',
dataType: "json",
data: formData
}).done(function (msg) {
console.log(msg);
$('#add-items-message').html(msg.success);
}).fail(function (msg) {
console.log(msg);
$('#add-items-message').html(msg.failure);
});
});
PHP代码:
public function additemsAction()
{
$layout = $this->layout();
$layout->setTerminal(true);
$view_model = new ViewModel();
$view_model->setTerminal(true);
if ($this->getRequest()->isPost()) {
try {
$store_name = $this->params()->fromPost('store_name');
$item_name = $this->params()->fromPost('item_name');
$item_price = $this->params()->fromPost('item_price');
$item_desc = $this->params()->fromPost('item_desc');
$item_num = $this->params()->fromPost('item_num');
$item_image = $this->params()->fromFiles('item_file');
var_dump($item_image);
if ($this->getUserService()->addItemsToStore($store_name, $item_name, $item_desc, $item_image, $item_num, $item_price)) {
echo json_encode(array('success' => 'Item was successfully added to your store'));
}
} catch (\Exception $e) {
echo json_encode(array('failure' => $e->getMessage()));
}
}
return $view_model;
}
if (!is_dir(realpath(getcwd()) . '/public/images/uploads/store/' . $owner_id . '/' . $this->store_name . '/items')) {
mkdir(realpath(getcwd()) . '/public/images/uploads/store/' . $owner_id . '/' . $this->store_name . '/items', 0777, true);
}
for ($i=0; $i<count($item_image); $i++) {
if (is_uploaded_file($item_image['tmp_name'][$i])) {
move_uploaded_file($item_image['tmp_name'][$i], realpath(getcwd()) . '/public/images/uploads/store/' . $owner_id . '/' . $this->store_name . '/items/' . $item_image['name'][$i]);
$this->imagick = new \Imagick(realpath(getcwd()) . '/public/images/uploads/store/' . $owner_id . '/' . $this->store_name . '/items/' . $item_image['name'][$i]);
// automatically enhance them
$this->imagick->enhanceImage();
$this->imagick->writeImagesFile(fopen(realpath(getcwd()) . '/public/images/uploads/store/' . $owner_id . '/' . $this->store_name . '/items/' . $item_image['name'][$i], 'wb'));
}
}
因此,基本上,它没有将文件移动到新位置,也没有在文件上执行imagick的功能,但是我检查了日志,并且apache日志中没有写入错误,所以我真的很困惑。哦,我确实使用了var_dump
,结果是"array(5) {↵ ["name"]=>↵ string(40) "80E0C7D8-CEB1-49E5-839F-A08F0DE798CB.jpg"↵ ["type"]=>↵ string(10) "image/jpeg"↵ ["tmp_name"]=>↵ string(24) "C:\xampp\tmp\php89B6.tmp"↵ ["error"]=>↵ int(0)↵ ["size"]=>↵ int(68903)↵}
因此formData正在选择所有文件,但是PHP仅显示一个文件,而不显示多个文件。
任何帮助将不胜感激。
谢谢。