我被困了!! :( 我想上传带有标题和标题的图像文件,我想使用javascript验证标题标题并选择一个文件。
我的HTML在这里:
<input type="text" name="title2" id="title2" value="title" /><br />
<textarea cols="50" rows="10" name="caption" >caption goes here...</textarea><br />
<input type="file" name="photo" id="photo" /><br />
<button id="submit_info" onclick="photowcap()" >post</button><br />
和我的javascript在这里:
function photowcap()
{
var title = document.getElementsByName("title2")[0].value;
var photo = document.getElementsByName("photo")[0].value;
var captions = document.getElementsByName("caption")[0].value;
var caption = encodeURIComponent(captions)
var xmlhttp;
if(title == "" || title == " " || title == "title")
{
document.getElementsByName("title2")[0].focus();
document.getElementsByName("title2")[0].value="";
return;
}
else if(captions == "" || captions == " " || captions == "caption goes here..."){
document.getElementsByName("caption")[0].focus();
document.getElementsByName("caption")[0].value="";
return;
}
else if(photo == ""){
alert("please choose image");
}
else{
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
alert("Success!!!");
}
}
xmlhttp.open("GET","photowcap.php? title="+title+"&caption="+caption+"&photo="+photo,true);
xmlhttp.send();}
}
使用php保存它:
<?php
include("admin_conn.php");
$title = $_GET["title"];
$caption = $_GET["caption"];
$photo = $_GET["photo"];
$time=time();
$date = (date("D F d Y",$time));
$query_photowcap = "INSERT INTO school_updates(title, photo, caption, date, time) VALUES('$title','$photo','$caption','$date','$time')";
mysql_query($query_photowcap);
?>
它只将文件路径保存为“C:fakepath / filename ....”因为我对如何使用javascript获取文件名一无所知,最后我将此代码保存到文件夹中但我真的不知道应该放在哪里:感谢提前:)
<?php
error_reporting(0);
$max_file_size = 200 * 1024; #200kb
if (($_FILES["photo"]["type"] == "image/gif")
|| ($_FILES["photo"]["type"] == "image/jpeg")
|| ($_FILES["photo"]["type"] == "image/png" )
&& ($_FILES["photo"]["size"] < $max_file_size))
{
$path = 'images/' . uniqid();
move_uploaded_file($_FILES["photo"]["tmp_name"],
$path.$_FILES["photo"]["name"]);
}
else
{
echo "Files must be either JPEG, GIF, or PNG and less than 200 kb";
}
?>
答案 0 :(得分:6)
为了使用$_FILES
超全局访问文件,需要使用multipart/form-data
内容类型标头和适当的属性发送它们。遗憾的是,您无法手动使用xhr
的send方法执行此操作,因为发送字符串将自动转换为UTF-8
。幸运的是,您仍然可以从javascript的window.File
发送二进制数据,例如文件。
旧版浏览器不支持此功能。代码看起来像
var file = document.getElementById('photo').files[0];
...
xhr.send(file);
然后在服务器端,您将需要直接访问输入缓冲区以获取此文件
$file = file_get_contents('php://input');
如果您坚持使用$_FILES
,则可以在javascript中使用FormData
对象。我之所以选择这个作为第二种选择,是因为我听说过更多的支持问题,而且我个人现在也避免使用它。
var formData = new FormData(document.getElementById('theForm'));
...
xhr.send(formData);
现在已经有一段时间了,因为我发布了这个答案,现在广泛支持FormData对象,如果您希望上传文件以及其他数据,可以查看。
答案 1 :(得分:0)
您正在尝试使用ajax上传图片...简短答案...通常您不能。您需要上传多部分/表单数据,使ajax上传变得困难。
一个简单的解决方法是用js验证表单,然后通常提交它。就像这里:Ajax Upload image - 嗯......忽略标题,误导。