【发布时间】:2014-04-09 15:21:45
【问题描述】:
您好,我正在尝试使用这段代码:
我正在尝试构建智能图像上传器,它会关心 html 5 多选错误(或有人可以说的功能),当我决定选择一些额外的文件时,它将删除“以前的文件”。它还有一些原始方法允许用户选择之前选择的文件。
这部分工作正常,我看到图像预览,并且在控制台中回显“文件”对应于文件数量。
奇怪的是来自 PHP 脚本的返回(回显),它说文件在 /tmp 目录中,并且大小正确,但文件不会被移动。
我检查了权限并将上传的文件夹设置为“幸运”777。 我检查了 /tmp 文件夹,文件不在那里,但 PHP 脚本说 taht 在这里。 我知道你不能设置,你不能设置是合乎逻辑的,但是 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"]); -
不幸的是,这没有帮助......
-
确保运行 Web 服务器的用户有权写入 upload/ 目录。
标签: php jquery ajax file-upload xmlhttprequest