【问题标题】:uploading image using javascript使用javascript上传图片
【发布时间】:2014-01-28 04:33:30
【问题描述】:

我卡住了!! :( 我想上传带有标题和标题的图像文件,我想使用 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";
  }

?>

【问题讨论】:

  • "C:fakepath/filename...." 是浏览器安全设置给出的。您将无法获得的原始路径。 dev.sencha.com/deploy/ext-4.0.0/examples/form/file-upload.html是专业程序员做的,连他们都绕不过去。
  • 请帮助 :) 我只是有点卡住了...抱歉英语不好 :D
  • 帮助解决什么问题?
  • @Alexdn 您需要了解文件的工作原理。这不像复制/粘贴那么简单。您需要将文件作为二进制数据发送并在服务器端进行处理。
  • 我之前已经上传过图片,但是使用的是纯PHP。现在,我想用javascript来做。先生,您有什么建议??

标签: javascript php


【解决方案1】:

为了使用$_FILES 超全局访问文件,需要使用multipart/form-data 内容类型标头和适当的属性发送它们。不幸的是,您不能手动使用xhr 的发送方法执行此操作,因为发送字符串将自动转换为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);

编辑 2016

自从我发布此答案以来已经有一段时间了,现在 FormData 对象得到了广泛的支持,如果您希望上传文件以及其他数据,您可以考虑一下。

【讨论】:

  • 不知道这个...你能分享一个链接或更多细节吗?
  • @zozo 看看 File API 和 XHR2。
【解决方案2】:

您正在尝试使用 ajax 上传图像...简短的回答...通常您不能。你需要一个 multipart/form-data 来上传,让 ajax 上传很痛苦。

一个简单的解决方法是使用 js 验证表单,然后正常提交。喜欢这里:Ajax Upload image - 好吧...忽略标题,具有误导性。

【讨论】:

  • 现在,我刚刚意识到一些重要的事情。
  • 您可以与其他人分享...不仅仅是让我们好奇:)。
  • 您可以在所有现代浏览器中通过 ajax 上传文件。
  • 这就是为什么我说正常...并说这是一种痛苦并非不可能:P。其他评论(在 php_nub 处)的答案也是 ty。
  • 这并不痛苦,使用 File API 和 XHR2 很容易
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 2017-11-25
  • 2014-08-22
相关资源
最近更新 更多