drag and drop upload komt niet in gewenste directory terecht
Ik heb een drag and drop area en een gewone input voor file uploads.
De drag and drop:
Code (php)
1
<div class="sfmform" id="drop-area"><h3 class="drop-text">Drag and Drop Images Here</h3></div>
En de gewone form:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<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>
<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>
Dit is de afhandeling met php (die staat in hetzelfde bestand boven de form en boven de drag and drop area:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
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 succesvol geupload
}
}
// file is ready to be uploaded
$tmpFilePath = $_FILES['file']['tmp_name'];
$newFilePath = $dir.'/' . $_FILES['file']['name'];
if(move_uploaded_file($tmpFilePath, $newFilePath)) {
//echos succesvol geupload
}
}
De var $dir wordt uitgelezen via de url op deze manier:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
// 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;
}
$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$strArr = explode("=",$actual_link);
$CurrentPath = $strArr[1];
if(isset($_GET['dir'])) {
$dir = $CurrentPath;
}
Dus als mijn url string er zo uitziet: website.nl/sfm?dir=uploads/sfm/root/folder1
krijt $dir de volgende waarde toegekend: uploads/sfm/root/folder1
Dit is mijn ajax call:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
function uploadFormData(formData) {
$.ajax({
url: "sfm",
type: "POST",
data: formData,
contentType:false,
cache: false,
processData: false,
success: function(data){
$('#drop-area').append(data);
}
});
}
$.ajax({
url: "sfm",
type: "POST",
data: formData,
contentType:false,
cache: false,
processData: false,
success: function(data){
$('#drop-area').append(data);
}
});
}
Probleem: doe ik de upload via de form dan komt ie netjes terecht in de waarde wat $dir heeft; die wordt uitgelezen via de url
Doe ik de upload via drag and drop dan komt de file ALTIJD in de root terecht; terwijl hij toch dezelfde php afhandeling voor uploaden volgt. Maw: hij kan blijkbaar de waarde van $dir niet lezen.
Als ik in de php het volgende neerzet:
Code (php)
1
2
3
4
2
3
4
// file is ready to be uploaded
$tmpFilePath = $_FILES['file']['tmp_name'];
$dir ="uploads/sfm/root/folder1"; // handmatig geset
$newFilePath = $dir.'/' . $_FILES['file']['name'];
$tmpFilePath = $_FILES['file']['tmp_name'];
$dir ="uploads/sfm/root/folder1"; // handmatig geset
$newFilePath = $dir.'/' . $_FILES['file']['name'];
plaats ie de upload via drag and drop WEL in folder1.
Het betreft hier 1 file, sfm.php waarin de php staat, daaronder de form en de ajax call.
Kan iemand me zeggen waarom de variabele waarde van $dir niet uitgelezen kan worden via drag and drop en wel via de normale form upload? Beiden volgen exact dezelfde ph afhandeling voor upload, zoals hierboven
Om te beginnen: waarom vorm je $dir op zo'n idiote manier? Dezelfde waarde staat in $_GET['dir']. In je AJAX call geef je geen dir mee, je geeft als uploadpath sfm, maar dit moet sfm?dir=... zijn.
Ik was in de veronderstelling dat in de ajax de url moest verwijzen naar het bestand waarin de php afhandeling staat, en dat is sfm.php. Hij deed dus een request op dezelfde pagina. Maar daar moet dus het pad instaan.
dit werkt nu goed:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
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);
}
});
}
$.ajax({
url: "<?php 'sfm?dir='.$dir; ?>",
type: "POST",
data: formData,
contentType:false,
cache: false,
processData: false,
success: function(data){
$('#drop-area').append(data);
}
});
}
Dankje voor deze hulp
Gewijzigd op 23/05/2016 12:17:19 door Jack Maessen