当前位置: 首页 > 知识库问答 >
问题:

php卷曲多部分/表单数据:未发布的文件内容

劳高爽
2023-03-14

我正试图将一个文件发送到box(云存储)。应该很容易,但事实并非如此。

我使用RequestBin进行调试。

在命令行上使用curl时,它工作得很好(文件被张贴到框中):

curl https://requestb.in/1bw1 -H "Authorization: Bearer supersecret" -H "Content-Type: multipart/form-data" -X POST -F file=@/tmp/testfile.pdf

卷曲cli(正确):

生坯

-------------------------------------------------------------------------------------------------name=“属性”

生坯

---------------------------------------------------------------------------------------------name=“属性”

{“name”:“testfile.pdf”,“parent”:{“id”:“42035106321”}}-------------------------------------------------------------------------------------------------------------------------name=“文件”

@../faxout/testfile.pdf---------------------------------------------------------------------------------------

这是克利里不一样,我不知道如何得到同样的结果。

我的PHP代码:

$dataFile = array(
        'name' => $faxfilename,
        'parent' => array(
                'id' => $subfolderID,
            )
        );
    $PostData= array(
        'attributes' => json_encode($dataFile),
        'file' => "@$target"
    );
    $headers3=array(
        "Authorization: Bearer supersecret",
        "Content-Type: multipart/form-data"
        );

    //$filesurl = "https://upload.box.com/api/2.0/files/content";
    $filesurl = 'https://requestb.in/1bw1';
    $curlFILE = curl_init();
    curl_setopt_array($curlFILE, array(
        CURLOPT_URL => $filesurl,
        CURLOPT_HTTPHEADER => $headers3,
        CURLOPT_POST => TRUE,
        CURLOPT_POSTFIELDS => $PostData,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_SSL_VERIFYPEER => FALSE,
        CURLOPT_SSL_VERIFYHOST => FALSE
    ));
CURLOPT_POSTFIELDS => http_build_query($PostData),
'@'.realpath($target)

共有1个答案

华永逸
2023-03-14

你在找卷发文件。

$curlFILE = curl_init ();
curl_setopt_array ( $curlFILE, array (
        CURLOPT_URL => 'https://requestb.in/1bw1',
        CURLOPT_HTTPHEADER => array (
                "Authorization: Bearer supersecret" 
        ),
        CURLOPT_POST => TRUE,
        CURLOPT_POSTFIELDS => array (
                'file' => new CURLFile ( '/tmp/testfile.pdf' ) 
        ),
        //CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_SSL_VERIFYPEER => FALSE,
        CURLOPT_SSL_VERIFYHOST => FALSE 
) );
curl_exec($curlFILE);

另外,当使用multipart/form-data或application/x-www-urlencoded编码时,不要手动设置content-type头,curl会自动为您设置适当的头,而且与您不同,curl在这样做时不会出现任何错别字。

此外,如果设置选项时出现问题,curl_setopt_array将返回bool(false),您不应该忽略这些错误,因此我建议使用此函数,它将所有curl setopt错误转换为RuntimeException

function ecurl_setopt_array($ch, array $options) {
    if (! curl_setopt_array ( $ch, $options )) {
        throw new \RuntimeException ( 'curl_setopt_array failed. ' . curl_errno ( $ch ) . ': ' . curl_error ( $ch ) );
    }
}
 类似资料:
  • 所以这个HTML代码以正确的格式提交数据给我。 谢了!

  • 这几天我一直被这个问题难住了。如果有人能给我指出正确的方向,我将不胜感激!我一直在想如何通过facebooks graph api发布图像。 我从Facebook上下载了一张图片,它通过图形API显示在画布元素中。我正在修改这个元素,在上面画文本,然后想把它上传回facebook。我被上传卡住了。 以下是我看过的有帮助的链接,但我仍然卡住了: Facebook Graph API——使用JavaS

  • 我试图在PHP中使用multipart/form-data头发布一个带有cURL的图像,因为我发送到的API期望图像以多部分形式发送。 我没有问题与API与其他请求;只有张贴图像是一个问题。 我在客户端使用此表单: 请求头中的content-type现在显示正确了。但是图像似乎没有像API所期望的那样正确地发送。不幸的是,我无法访问API... 感谢您的帮助,谢谢

  • 我试图将一个文件发布到spring boot中使用Curl实现的restfulendpoint,但它抛出以下错误: 我一定是错过了一些基本的东西,但却看不出是什么。它正在寻找请求参数'file',但不确定如何通过curl发送。 提前致谢 更新: 我在下面的链接中尝试了解决方案

  • 我想问一些问题,最近我不得不将我们的遗留应用程序迁移到weblogic,但有些功能不能使用(多部分post form),下面是我的代码: noticewrite.jsp: noticeProc.jsp 问题是,当我单击提交按钮时,文件存储到服务器,但文本字段和文本区域值没有存储到数据库,并引发错误: 我需要你的建议,这有什么问题?因为它在tomcat上工作得很好,但不能在weblogic下运行,谢

  • 我正在开发一个Web应用程序的模块。要触发这个模块,我需要向服务器提交一些数据。对于简单的表单,ChromeDeveloper Tools中的工作正常(使用msys[git]中的curl),但是对于具有的发布请求,复制的字符串在windows shell中既不可用(cmd)或bash(msys表单);复制的文本类似于: 有什么办法可以让我用这个或者把它转换成有用的东西吗?