Переместить загруженный файл не удалось после ajax-запроса

Я знаю, что эта проблема решалась несколько раз, но у меня нет решения,

У меня есть функция JavaScript, которая извлекает файл, на который ссылается, который следующим образом

function imagePreload(str)
{
var timestamp = new Date().getTime();
str = str + "&timestamp=" + timestamp;
var key = [];
var value = [];
var queriesarray = str.split('&');
for(i = 0; i < queriesarray.length; i++)
{
var pair = queriesarray[i].split('=');
key[i]= pair[0];
value[i]= pair[1];
}
for(i = 0; i < queriesarray.length; i++)
{
if (key[i]=="menu_id") {var menuid = value[i];}
if (key[i]=="menucategories_id") {var catid = value[i];}
}
for(i = 0; i < queriesarray.length; i++)
{
if (value[i]=="business") {var fileurlfield = "uploadbizimageid";}
if (value[i]=="category") {var fileurlfield = "uploadcatimageid" + catid;}
if (value[i]=="item") {var fileurlfield = "uploaditemimageid" + menuid;}
}

var fileInput = document.getElementById(fileurlfield);

var file = fileInput.files[0];
var imageType = /image.*/;

if (file.type.match(imageType)) {
var reader = new FileReader();
reader.onload = function(e) {
var img = new Image();
img.src = reader.result;
}
reader.readAsDataURL(file);

} else {
alert("File not supported!");
}
document.getElementById("maskid").style.display = "block";
document.getElementById("imageuploadcontainerid").style.display = "block";

var filetosend = new FormData();
filetosend.append( 'image', file);

$.ajax({
url: "index.php?option=com_jumi&fileid=13&format=raw&" + encodeURI(str),
type: "POST",
data: filetosend,
processData: false,
contentType: false,
error: function (jqXHR, textStatus, errorThrown) {
alert("AJAX error: " + textStatus + ' : ' + errorThrown);
},
success: function(html) {alert("Orwight!");
document.getElementById('imageuploadcontainerid').innerHTML = html;
}
});
}

Как вы можете видеть, он предназначен для вызова AJAX файла php, который должен сохранить этот файл изображения в каталоге на том же веб-сервере, на котором запущена вышеуказанная функция.

PHP в этом файле выглядит следующим образом.

$rest_id = $_GET['rest_id'];
$menu_id = $_GET['menu_id'];
$menucategories_id = $_GET['menucategories_id'];
$imagetype = $_GET['imagetype'];

if($imagetype=="business")
{
$db    = &JFactory::getDBO();
$db->setQuery("SELECT * FROM g56s_restaurants WHERE rest_id = '$rest_id'");
$det = $db->loadObject();
$ext = pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION);
$target_path = "/images/restaurants/".$rest_id."/";
$target_path = $target_path ."businesslogo.".$ext."";
echo $target_path;

if(move_uploaded_file($_FILES['image']['tmp_name'], $target_path)) {
echo "The file ".basename( $_FILES['image']['name'])." has been uploaded";
} else {
echo "Not uploaded because of error #".$_FILES["file"]["error"];
}
}

Каждый раз, когда я вызываю его сценарий, загрузка завершается сбоем, и об ошибке не сообщается (т.е. номер ошибки отсутствует). Дамп var показывает, что переменная ошибки файла имеет значение 0, а размер файла сообщается в том же порядке, что и у исходного файла, и имеет имя tmp. Другими словами, файл находится в каталоге TMP.

Права доступа к каталогу в каталоге, к которому пишется, — 777. Нет проблем между доменами (и я думаю, что нет проблем с CORS), так как скрипт вызывается с того же веб-сайта (PHP фактически находится в приложении JUMI на веб-сайте Joomla 3.4). Тем не менее, скрипт ВСЕГДА не может загрузить файл (страница возвращает «/images/restaurants/1/businesslogo.jpg не загружен из-за ошибки #.» (Так как я также отображал target_path до того, как эхо-строка ошибки повторилась).

Кто-нибудь знает причину этого и как заставить скрипт загружаться правильно? Я полностью застрял в этом вопросе, потому что, насколько я вижу, все должно работать.

1

Решение

Я решил проблему быстрее, чем думал, оказалось, что мне также нужно указать корневой каталог документа в целевом пути, поэтому я исправил

 $target_path = "/images/restaurants/".$rest_id."/";

как

$target_path = $_SERVER['DOCUMENT_ROOT']."/images/restaurants/".$rest_id."/";

и теперь это работает 🙂

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]