使用Curl命令行将多个文件上传到PHP服务器

32

我需要使用curl命令行工具将多个文件上传到服务器。对于单个文件,我使用以下命令没有问题:

curl -F "image=@file1.gif"   http://localhost:8888/web/Upload.php

我该如何处理多个文件,以便php变量$_FILES["image"]["error"]返回一个数组?

我已经尝试过

curl -F "image=@file1.gif" -F "image=@file2.gif"  http://localhost:8888/web/Upload.php
curl -F "image=@file1.gif,image=@file2.gif"  http://localhost:8888/web/Upload.php

但这些都是瞎猜。

2个回答

60

关键在于给文件上传参数取唯一的名称。

curl -F "image=@file1.gif" -F "image2=@file2.gif"  http://localhost:8888/web/Upload.php

这将显示在$_FILES超全局变量中,作为$_FILES ['image']$_FILES ['image2']

为了使文件分组到一个$_FILES索引下,你需要将参数命名为数组:

curl -F "image[]=@file1.gif" -F "image[]=@file2.gif"  http://localhost:8888/web/Upload.php

这只是用于测试一款 iPhone 应用程序将要使用的网络服务。它将一次性加载多张图片。 - sapatos
哦,如果您将参数命名为数组,则可以使用curl实现。更新的示例。 - complex857

0
你可以使用curl_multi_init()。我正在开发一个项目,由于我是新手,可能还不到一年,所以对我来说非常困难。我需要使用API(anonfiles.com)将文件上传到服务器。 注意:我的脚本基于用户输入的多个文件。代码如下。
<?php
if (isset($_POST['btnUpload'])){
    $total = count($_FILES['file']['name']);
    for( $i=0 ; $i < $total ; $i++ ) {
      $filename = $_FILES['file']['name'][$i];
      $filedata = $_FILES['file']['tmp_name'][$i];
      $filetype = $_FILES['file']['type'][$i];
      $chfile = new CURLFile($filedata, $filetype, $filename); //creating a CURL object
      $request[]=['file'=>$chfile]; //making an asscoiative array with [1]=>['file'=>'curlobject'] and so on
      $urls[] = "https://api.anonfiles.com/upload?token=ced2abXXXXXXX";//added this each time because this was the only one url
    }

    print_r($request);//just for verification
    echo "<br>";
    print_r($urls);//verification
    echo "<br>";
    echo "<br>";
    $mh = curl_multi_init(); //initialise multi curl
    foreach ($urls as $key => $url) {
        $chs[$key] = curl_init($url);
        //set your own opts, these are the minimum required
        curl_setopt($chs[$key], CURLOPT_RETURNTRANSFER, true);
        curl_setopt($chs[$key], CURLOPT_POST, true);
        curl_setopt($chs[$key], CURLOPT_POSTFIELDS, $request[$key]);//adding file data
        curl_setopt($chs[$key], CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));//make sure this header is there for it to act like data


        curl_multi_add_handle($mh, $chs[$key]);//add them to the handle that we initialised
    }

    //running the requests
    $running = null;
    do {
      curl_multi_exec($mh, $running);
    } while ($running);

    //getting the responses
    $responsearray = array();//Just to store the responses
    foreach(array_keys($chs) as $key){
        $error = curl_error($chs[$key]);
        $last_effective_URL = curl_getinfo($chs[$key], CURLINFO_EFFECTIVE_URL); 
        $time = curl_getinfo($chs[$key], CURLINFO_TOTAL_TIME);//response time
        $response = curl_multi_getcontent($chs[$key]);  // get results
        array_push($responsearray, $response);
        curl_multi_remove_handle($mh, $chs[$key]);//removing it as a handle
    }
    // close current handler
    curl_multi_close($mh);
    echo "<br>";
    echo "<br>";
    echo "<br>";
    echo "<br>";
    print_r($responsearray);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接