2016-05-22 3 views
0

появляется следующая проблема: У меня есть перетащить область для загрузки файлов и нормальной формы:как изменить текущий путь для загрузки при работе с 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); 
} 
}); 
} 
+0

Почему вы не передадите ваш '$ dir' как в' 'POST с' formData' через ajax, а затем захватить его на стороне PHP и делать все, что вы там делаете ..! –

+0

@ Umair Shah Yousafzai Можете ли вы придумать мне пример, как это сделать? –

+0

Где находится ваш код '$ dir', доступен ли он на странице, где имеется код ajax? –

ответ

-1

Решение уже найдено , Вот как это должно быть:

function uploadFormData(formData) { 
$.ajax({ 
url: "<?php 'sfm?dir='.$dir; ?>", 
type: "POST", 
data: formData, 
contentType:false, 
cache: false, 
processData: false, 
success: function(data){ 
    $('#drop-area').append(data); 
} 
}); 
} 

Путь должен быть определен в URL из Аякса

+0

Yup. .. Может быть так, как сюда тоже ..! Но тот, который я показал вам, более безопасен, так как ваш использует метод GET для передачи аргументов по URL-адресу, поэтому он не защищен так, как это делается.! –

1

Вот как именно вы можете передать значение $dir с formData в Ajax вызова как:

function uploadFormData(formData) { 
    formData.append('dir', <?php echo $dir; ?>); 
    $.ajax({ 
     url: "sfm", 
     type: "POST", 
     data: formData, 
     contentType: false, 
     cache: false, 
     processData: false, 
     success: function(data) { 
      $('#drop-area').append(data); 
     } 
    }); 
} 
+0

Запустите 'print_r ($ _ POST);' на странице запроса ajax и взгляните на данные, которые вы получаете от вашего запроса, и тогда вы точно узнаете, как захватить данные в 'PHP' –

Смежные вопросы