Javascript Ajax PHP文件上传程序无法工作
我正在使用ajax图像上传器,当有人提交图像时,它会自动工作。我的问题是,当我在代码中添加重命名以排序图像名称时,它不会像预期的那样工作Javascript Ajax PHP文件上传程序无法工作,javascript,php,ajax,upload,xmlhttprequest,Javascript,Php,Ajax,Upload,Xmlhttprequest,我正在使用ajax图像上传器,当有人提交图像时,它会自动工作。我的问题是,当我在代码中添加重命名以排序图像名称时,它不会像预期的那样工作 rename("user_image/".$_FILES[uploaded][name].".png","user_image/".$_SESSION["id"].".png"); 该文件不会上载并移动到指定目录,但当我删除该文件时,该文件已上载,我认为问题在于他可以编辑文件的权限。文件权限为644 这是我的php文件: <?php if($_
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>
你想重新命名一些你不能重命名的东西$_文件['Upload']['name']是客户端计算机的原始文件名。所以在你的服务器上不会有像C:\tmp\abc.png这样的文件,这意味着你不能重命名它
不管怎样,这一行的重命名有什么意义?如果要重命名,请在“移动上传的文件”功能中执行。我认为重命名文件时不会提供图像文件的静态扩展名,并且在文件上载过程中不会更改图像的扩展名 内容类型标头需要设置为多部分/表单数据。因此,服务器知道它需要什么样的数据 这将在Internet Explorer中工作
ajax.setRequestHeader("Content-type", "multipart/form-data");
但在Firefox或Chrome中添加这一功能会导致PHP中的post数据丢失
现在服务器知道它可能需要一些复杂的表单数据,包括文件和blob。我经常读到,由于Ajax的内容,您无法通过它传递文件。也许我错了,但当有人要求时,我读到的就是这个。上传的文件实际上是用临时文件名存储的。使用$_文件['upload']['tmp_name']可能与我一小时前回答的xhr问题重复。您需要添加特定的问题。您正在重复上载问题,并在此线程中解决移动临时文件的问题。请分别提问。检查php.ini值以获取文件上传。它应该设置为1。它可能会被禁用,这可能会阻止用户上传文件。即使我在move_uploaded_file上重命名了它,文件也不会被上传。我已经在encrypte=multipart/form dataMouser标签中指定了内容加密类型。即使我完全按照你说的做了,同样的问题仍然存在。请帮助。PHP会给我什么回报?请再次尝试var_dump。你有没有用开发工具嗅探过你的帖子?发送到服务器的是什么?我在上传的未定义索引的已发送响应中出错,但正如您在我的代码中看到的,我在输入标记中定义了name属性,我应该做什么请帮助?您是否通过开发工具浏览嗅探请求?是否由浏览器在post参数中发送上载?