通过卷曲发送图像失败

时间:2015-08-04 14:22:00

标签: php curl

无法让curl将照片发送到远程API。

远程服务器在接收现场直接提交时工作正常。文件上传文件名为photos[](api运行laravel 5,禁用csrf)。

首先我这样做:

foreach ( $carRaw[ 'imgs' ] as $k => $v) {

    $tmpFile = tempnam( '/tmp/curlfiles', 'autoge-' );

    file_put_contents(

        $tmpFile,

        file_get_contents(

            'http://' . $v[ 'ipt' ] . '/im/im-' . $v[ 'ikey' ]

        )
    );

    $car[ 'photos' ][ $k ] = new \CURLFile( $tmpFile, 'image/png', $v[ 'ikey' ] );

}

发送方法后:

    $ch = curl_init();

    curl_setopt( $ch, CURLOPT_URL, $addCarUrl );
    curl_setopt( $ch, CURLOPT_POST, true );
    curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $car ) );
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
    curl_setopt( $ch, CURLOPT_COOKIEFILE, $cookiePath );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_VERBOSE, false );

    $response = curl_exec( $ch );

    curl_close( $ch );

    $this->info( $response );

    return $response; // 1 or 0

问题是所有字段都是发送和保存的,但绝不是图像。我必须以错误的方式发送它们!

有任何帮助吗?

1 个答案:

答案 0 :(得分:1)

在这个问题发生后1天我发现了问题的根源!

我在博文中详细描述了我的解决方案:http://labs.weare.de.com/php-curl-multiple-file-upload-nightmare/

特别感谢@bishop正确的方向。

1. curl_setopt( $ch, CURLOPT_POSTFIELDS, $dataArray );

2. $car[ "photos[ $k ]" ]

因此,简而言之,问题是我试图使用curl的多维数组。它不接受它。另一个问题是,当您使用http_query_build时,curl会停止发送文件并提供正确的内容类型。

所以我使用了php hack:)