【发布时间】:2015-02-21 14:38:34
【问题描述】:
我正在开发 ajax 图片上传器,当有人提交图片时它会自动工作
rename("user_image/".$_FILES[uploaded][name].".png","user_image/".$_SESSION["id"].".png");
文件不会被上传并移动到指定的目录,但是当我删除它时,文件被上传了,我认为问题出在他可以编辑文件的权限上,文件权限是 644
这是我的 php 文件:
<?php
if($_SERVER["REQUEST_METHOD"]=="POST"){
$file = $_FILES["uploaded"];
$target_dir = "user_image/";
$target_file = $target_dir . basename($_FILES["uploaded"]["name"]);
move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target_file);
rename('user_image/'.$_FILE["uploaded"]["name"].".gif",'user_image/'.$_SESSION["id"].".gif");
}
?>
这是 html 和 ajax 的其余部分:
<!DOCTYPE html>
<html>
<head>
<title>Register</title>
<link href='http://fonts.googleapis.com/css?family=Arvo:400,700|Ubuntu:300,400,500,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="/css/style.css"/>
</head>
<body>
<div id="container">
<div id="half1">
<div id="upload">
<div id="user">
<img src="/img/1.png" id="one" alt="User image"/>
</div>
<img src="/img/plus.png" alt="Upload">
<form method="post" enctype="multipart/form-data"> <input name="uploaded" type="file" id="file_upload"/> </form>
</div>
</div>
<div id="half2">
<h1>Sign up!</h1>
<form action="register.php" method="post" >
<input type="text" placeholder="Age" name="age">
<input type="text" placeholder="Favourite dish" name="dish">
</form>
</div>
</div>
<p id="user_id" style="display:none;" ><?= $_SESSION["id"]; ?></p>
<script charset="UTF-8">
function _(id){
return document.getElementById(id);
}
_("file_upload").onchange = function() {
var id = _("user_id").innerHTML;
var file = _("file_upload").files[0];
var formdata = new FormData();
formdata.append("uploaded",file);
var ajax = new XMLHttpRequest();
ajax.onreadystatechange =
function(){
if(ajax.readyState==4 && ajax.status==200){
_("one").remove();
var img = document.createElement('img');
var first_path = '/user_image/';
var path = first_path.concat(id,'.png');
img.setAttribute('alt','User image');
img.setAttribute('id','one');
img.setAttribute('src',path);
_("user").appendChild(img);
alert("end");
}
else{
_("one").remove();
var img = document.createElement('img');
img.setAttribute('src','/img/loading.gif');
img.setAttribute('alt','User image');
img.setAttribute('id','one');
_("user").appendChild(img);
}
}
ajax.open("POST","upload_image.php");
ajax.setRequestHeader("Content-type", "multipart/form-data");
ajax.send(formdata);
};
</script>
</body>
【问题讨论】:
-
我总是读到你不能用 Ajax 传递文件,因为它的内容。可能我错了,但这是我在有人要求时读到的。
-
上传的文件实际上是以临时文件名存储的。使用
$_FILES['uploaded']['tmp_name'] -
Image upload ajax don't work 的可能重复项
-
我在一小时前回答了 xhr 问题。您需要添加具体问题。您正在重复上传问题并在此线程中解决移动临时文件问题。请提出单独的问题。
-
检查
file_uploads的 php.ini 值。它应该设置为1。它可能被禁用,这可能会阻止用户上传文件。
标签: javascript php ajax upload xmlhttprequest