появляется следующая проблема: У меня есть перетащить область для загрузки файлов и нормальной формы:как изменить текущий путь для загрузки при работе с AJAX
Перетаскивание:
<div class="sfmform" id="drop-area"><h3 class="drop-text">Drag and Drop Images Here</h3></div>
Ниже нормальной форме:
<form class="sfmform" action="" method="post" enctype="multipart/form-data">
<b>Upload Files</b>
<br /><br />
<input type="file" name="file" id="file" />
<br />
<input type="submit" class="Button Primary" name="upload" value="Upload" />
<br /><br />
</form>
Это, как я обрабатывать загрузки с PHP:
if($_SERVER['REQUEST_METHOD'] == "POST") {
// file is ready to be uploaded
$tmpFilePath = $_FILES['file']['tmp_name'];
$newFilePath = $dir.'/' . $_FILES['file']['name'];
if(move_uploaded_file($tmpFilePath, $newFilePath)) {
//echos successful upload
}
}
Переменная $dir
изменяется каждый раз; я прочитал это из текущего URL, как это:
// read actual dir from url
$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$strArr = explode("=",$actual_link);
$CurrentPath = $strArr[1];
if(isset($_GET['dir'])) {
$dir = $CurrentPath;
}
Так, если строка URL выглядит так: example.com/sfm?dir=uploads/sfm/root/folder1 $dir
имеет значение: uploads/sfm/root/folder1
Проблема: загрузка с нормальной формой помещает файл в папку1 Но загрузка с помощью перетаскивания помещает файл ВСЕГДА в корневой каталог. Оба имеют один и тот же php для загрузки, как указано выше. Возможно, при загрузке с помощью перетаскивания, он не может прочитать значение из $dir
Это мой Аякса вызов:
function uploadFormData(formData) {
$.ajax({
url: "sfm",
type: "POST",
data: formData,
contentType:false,
cache: false,
processData: false,
success: function(data){
$('#drop-area').append(data);
}
});
}
код PHP для загрузки находится в том же файле, что и перетаскивание div с формой. Файл вызывается: sfm.php
Почему загрузка с помощью перетаскивания невозможна в подпапках?
Update: это полный JavaScript:
$(document).ready(function() {
$("#drop-area").on('dragenter', function (e){
e.preventDefault();
});
$("#drop-area").on('dragover', function (e){
e.preventDefault();
});
$("#drop-area").on('drop', function (e){
e.preventDefault();
var sfmfile = e.originalEvent.dataTransfer.files;
createFormData(sfmfile);
});
});
function createFormData(sfmfile) {
var formFile = new FormData();
formFile.append('file', sfmfile[0]);
uploadFormData(formFile);
}
function uploadFormData(formData) {
$.ajax({
url: "sfm",
type: "POST",
data: formData,
contentType:false,
cache: false,
processData: false,
success: function(data){
$('#drop-area').append(data);
}
});
}
Почему вы не передадите ваш '$ dir' как в' 'POST с' formData' через ajax, а затем захватить его на стороне PHP и делать все, что вы там делаете ..! –
@ Umair Shah Yousafzai Можете ли вы придумать мне пример, как это сделать? –
Где находится ваш код '$ dir', доступен ли он на странице, где имеется код ajax? –