你好我試圖去上班這段代碼:上傳文件中使用AJAX - 回波PHP告知文件被上傳,但是文件不存在
我試圖構建智能圖像上傳,這將關心html5多選題(或某人可以說的功能),當我決定選擇一些額外的時候,它將刪除「以前的文件」。它也有一些原始的方法來允許用戶選擇以前選擇的文件。
這部分工作正常,我看到圖像預覽,並且在控制檯中回顯「文件」對應於文件數量。
奇怪的是來自PHP腳本的返回(回聲),它表示該文件位於/ tmp目錄中,並且大小也是正確的,但文件不會被移動。
我檢查了權限,並將上傳的文件夾設置爲「幸運」777. 我檢查了/ tmp文件夾和文件是否存在,但PHP腳本說是在這裏。 我知道你不能設置,這是合乎邏輯的爲什麼你不能,但應該從PHP腳本回顯顯示這個文件的大小和tmp位置,那麼如果這是一個問題?
代碼在這裏:
var noveSub = [];
var noveSubMeno = [];
var noveSubVelkost = [];
function samotnyUpload() {
var fd = new FormData();
fd.append('upload', noveSub[0]);
// trying just first file for testing
$.ajax({
url: '/upload/upload.php',
data: fd,
cache: false,
processData: false,
contentType: false,
type: 'POST',
success: function(data){
console.log(data);
}
});
}
function pridatSubory() {
$("li.pridaj").click(function() {
$("input").trigger("click");
});
function pushniNovy(subor) {
noveSub.push(subor);
noveSubMeno.push(subor.name);
noveSubVelkost.push(subor.size);
previewNovy(subor);
}
function previewNovy(subor) {
var li = document.createElement("li");
var img = document.createElement("img");
img.file = subor;
li.appendChild(img);
$(li).insertBefore("li.pridaj");
var reader = new FileReader();
reader.onload = (function(aImg) { return function(e) { aImg.src = e.target.result; }; })(img);
reader.readAsDataURL(subor);
}
var inputElement = document.getElementById("vyberSubor");
inputElement.addEventListener("change", handleFiles, false);
function handleFiles() {
var sub = this.files;
for (i=0; i<sub.length; i++) {
pos = noveSubMeno.indexOf(sub[i].name);
if (pos !== -1) {
if (noveSubVelkost[pos] !== sub[i].size) {
pushniNovy(sub[i]);
}
} else {
pushniNovy(sub[i]);
}
}
}
php文件:
<?php
if ($_FILES["upload"]["error"] > 0)
{
echo "Error: " . $_FILES["upload"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["upload"]["name"] . "<br>";
echo "Type: " . $_FILES["upload"]["type"] . "<br>";
echo "Size: " . ($_FILES["upload"]["size"]/1024) . " kB<br>";
echo "Stored in: " . $_FILES["upload"]["tmp_name"];
echo "<br><br>";
echo move_uploaded_file($_FILES["upload"]["tmp_name"], "upload/".$_FILES["file"]["name"]);
}
?>
輸出PHP文件中控制檯:
Upload: erb128.png<br>Type: image/png<br>Size: 4.734375 kB<br>Stored in: /tmp/phpdTy053<br><br>
我建議你move_uploaded_file的第二個參數使用絕對路徑。例如,嘗試'move_uploaded_file($ _ FILES [「upload」] [「tmp_name」],$ _SERVER [「DOCUMENT_ROOT」]。「/ upload /".$_ FILES [」file「] [」name「]);' –
不幸的是,這並沒有幫助... – Kovo
確保用戶Web服務器運行時有權寫入上傳/目錄。 – dcarrith