使用javascript上传图片 [英] uploading image using javascript
问题描述
我被卡住了!!:(我想上传带有标题和标题的图像文件,我想使用JavaScript来验证标题和所选的文件.
I'm stuck!! :( I want to upload image file with a title and a caption, I want to use javascript for validation of title caption and a file choosen.
我的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在这里:
and my javascript here:
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获取文件名一无所知,最后我有了这段代码将实际图像保存到文件夹中但是我并没有真正把它放在哪里:谢谢:)
it only save for the file path as "C:fakepath/filename...." because I dont have any idea on how to get filename using javascript, and finally I have this code for saving the actual image into the folder but I dont really get where I should place it: THANKS IN ADVANCE :)
<?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";
}
?>
推荐答案
为了使用 $ _ FILES
超全局文件访问文件,需要使用 multipart/form-data
内容类型标头和适当的属性.不幸的是,您无法使用 xhr
的send方法手动执行此操作,因为发送字符串会自动转换为 UTF-8
.幸运的是,尽管您仍然可以从javascript的 window.File
中发送二进制数据(例如文件).
In order to access files with the $_FILES
superglobal they need to be sent with a multipart/form-data
content-type header and appropriate attributes. Unfortunately you cannot do this with xhr
's send method manually because sending a string will be automatically converted to UTF-8
. Fortunately though you can still send binary data such as a file from javascript's window.File
.
在较旧的浏览器中不支持此功能.代码看起来像
This is not supported in older browsers. The code would look like
var file = document.getElementById('photo').files[0];
...
xhr.send(file);
然后在服务器端,您将需要直接访问输入缓冲区,以获取此文件的保留权
And then on the server side you will need to access the input buffer directly in order to grab a hold of this file
$file = file_get_contents('php://input');
如果您坚持使用 $ _ FILES
,则可以在javascript中使用 FormData
对象.之所以将其作为第二个选项,是因为我听说过更多的支持问题,因此我个人暂时不使用它.
If you insist on using $_FILES
you could use the FormData
object in javascript. The reason I left this as a second option is because I've heard about greater support issues and I personally avoid using it for now.
var formData = new FormData(document.getElementById('theForm'));
...
xhr.send(formData);
编辑2016
自从我发布这个答案以来已经有一段时间了,现在FormData对象得到了广泛的支持,如果您希望将文件和其他数据一起上传,您可能会对此感兴趣.
EDIT 2016
It has been some time now since I posted this answer and now the FormData object is widely supported, if you are looking to upload files along with other data you may look into that.
这篇关于使用javascript上传图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!