【问题标题】:Copying a file directly from a client's computer to the server folder将文件直接从客户端计算机复制到服务器文件夹
【发布时间】:2013-09-30 20:01:34
【问题描述】:

每当他/她从文件对话框中选择照片时,我正在使用 ajax 将图片从用户的计算机上传到我的文件夹?

move_uploaded_file() 可以在这里工作吗?我不这么认为。 :)

【问题讨论】:

  • 请显示一些代码 - 你如何进行上传?你是怎么处理的?
  • 你不能用 AJAX 上传文件。
  • 没有。您的服务器无法连接到用户的计算机并直接提取文件。几乎没有人不在防火墙后面,可以彻底阻止这种尝试。即使它们没有防火墙,它们可能仍然位于 NAT 网关、VPN 等之后……并且您的服务器无法访问它们。例如可能有大约 1 种不常见的网络配置可以工作,而太多非常常见的配置使其无法工作。
  • @davidkonrad,是的,您可以使用 XmlHttpRequest2 FormData 功能!当然,在使用它之前应该注意browser compatibility
  • @samuel,你是完全正确的 XHR2。点赞。

标签: php ajax file upload


【解决方案1】:

首先,如果您想使用 ajax 进行文件上传 - 使用 dropzone 非常容易做到这一点。它为您提供了许多功能,例如拖放/预览/删除以及更多功能

回到你的问题:

为什么你认为它不会?

你必须这样做

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg") && ($_FILES["file"]["size"] < 20000) && in_array($extension, $allowedExts)){
  if ($_FILES["file"]["error"] > 0){
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
  } else {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

    if (file_exists("upload/" . $_FILES["file"]["name"])){
      echo $_FILES["file"]["name"] . " already exists. ";
    } else {
      move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
      }
    }
  } else {
  echo "Invalid file";
  }
?>

请阅读herehere的所有内容

P.S 文件上传是一个非常棘手的问题。实现它很容易,但实现起来并不安全。为了以正确的方式做事 - 请考虑阅读此安全主题

https://security.stackexchange.com/questions/32852/risks-of-a-php-image-upload-form

https://security.stackexchange.com/questions/29719/secure-php-upload-form-storage?rq=1

【讨论】:

    【解决方案2】:

    您可以简单地使用copy,如果它没有上传并且您可以访问客户端计算机...

    使用示例:

    $file = 'example.txt';
    $newfile = 'example.txt.bak';
    
    if (!copy($file, $newfile)) {
        echo "failed to copy $file...\n";
    }
    

    或者像这样使用 xcopy:

    exec('xcopy c:\\myfolder d:\\myfolder /e/i', $a, $a1);
    

    假设您拥有完全访问权限

    【讨论】:

    • 访问是什么意思?
    • 您没有指定如何处理数据,如果它们是由脚本上传的,您可以使用move_uploaded_file(),如果不是,您需要访问客户端计算机(ftp 或 semothing),只需使用复制或xcopy 如上。
    【解决方案3】:
    if (move_uploaded_file($source, $target)) {
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 2014-07-08
      • 2015-04-08
      • 2013-11-04
      • 2018-05-24
      相关资源
      最近更新 更多