如何直接从源链接上传文件?

时间:2012-11-09 13:03:06

标签: php

有没有办法在不使用表单的情况下从源链接上传文件?假设一个数组包含3个文件名的链接。

$array = array('C:\test\a.jpg', 'C:\test\b.doc', 'C:\test\c.txt');

现在我想在Web服务器上传这3个文件。我怎么能用PHP做到这一点?

修改

实际上我目前正在一个网站(http://eventconnectbd.com/)上工作,管理员必须上传带有图片的活动信息。已创建一个包含100个图像链接的csv文件(所有链接都与管理员的pc相关)。所以基本上我创建了一个这些图像链接的数组,并希望逐个上传。

4 个答案:

答案 0 :(得分:1)

不,这是不可能的。

如果您只知道客户端路径,那么您的Web服务器需要浏览客户端文件系统,当然,这是不允许的。想象一下:如果它被允许,互联网上的每个服务器都可以读取你的所有文件,这是不可取的。

答案 1 :(得分:1)

<?php
$array = array('/var/www/a.jpg', '/var/www/b.jpg', '/var/www/c.jpg');
$dest_path = '/var/www/myweb/';
foreach($array as $file_path){
$file_name = end(explode('/', $file_path));
copy($file_path, $dest_path . $file_name);
}
?>

答案 2 :(得分:1)

不,这是不可能的。无论好坏,服务器都无法访问客户端的硬盘内容(更好,真的如此)。您必须编写一个可以获得此类访问权限的浏览器插件(例如,Java小程序)。

或者,您必须批量上传图片。将它们压缩并上传一个服务器可以再次拆分的zip文件,或再次使用一个插件,它允许您一次选择多个文件进行上传(Flash很受欢迎)。

答案 3 :(得分:0)

当然这是可能的。 您所要做的就是实现两个部分:

  1. 服务器端的一个简单API,在一个php脚本中实现。 它接受一个文件并将其存储在某个地方。也许你想补充一下 一些安全性或合理性检查,但这是另一个故事。
  2. 客户端上的一个小脚本,它迭代数组并上传 每个文件使用API​​一个接一个。
  3. 这就是全部,不需要任何表格,也不需要手动上传单个对象。


    根据要求,我添加了一个简短的例子。没什么好看的,只是为了表明这个想法:

    服务器端API,这里名为upload.php的原始php脚本:

    <?php
    // this is where uploaded files get dumped to
    define('FILES_STORAGE','/some/path/writeable/for/http-server');
    // $_FILES holds the meta data of the uploaded file as stored temporarily
    syslog(LOG_DEBUG,sprintf("upload API accepted file '%s'",$_FILES['filedata']['name']));
    // copy file to its final destination (temp file gets removed automatically)
    copy ( $_FILES['filedata']['tmp_name'] , FILES_STORAGE.$_FILES['filedata']['name']);
    // some feedback to the client, might be ignored
    echo sprintf("file '%s' accepted and stored. ", $_FILES['filedata']['tmp_name']);
    ?>
    

    客户端脚本,我制作了一个简单的bash脚本,尽管你可以使用你想要的任何语言或客户端可用的语言。它只上传一个singel文件,但显然这可以在处理文件列表或其他任何内容的循环中完成:

    #!/bin/bash
    curl -i -F name=test -F filedata=@test.png http://api.myserver.org/upload.php
    

    执行脚本时,文件会上传并移动到API文件顶部定义的文件夹FILES_STORAGE。没有错误,安全性和合理性检查,因为这是一个概念证明。