【问题标题】:Trying to upload a file from C++ with CURL to PHP尝试使用 CURL 将文件从 C++ 上传到 PHP
【发布时间】:2015-09-20 00:33:49
【问题描述】:

我正在尝试将带有 CURL 的图片(及其拇指)从 C++ 上传到我的服务器。

C++ 暂时没有问题,但重点如下:

想象一下这是我在 PHP 中的代码:

<?php
    $valid = $_GET['valid'];
    echo "hola";
    file_put_contents('queries.txt', "eh!\n");
?>

当我打电话给我的file.php 时,它必须在同一个文件夹中写一个“queries.txt”(它确实做到了)。

现在,当从 C++ 调用 if 时,代码如下:

    string url = "http://myserver.com/file.php";

    CURL* curl = curl_easy_init();

    // set target url
    curl_easy_setopt(curl, CURLOPT_URL, url.c_str());

    // holders
    struct curl_httppost* beginPostList = NULL;
    struct curl_httppost* endPostList = NULL;

    string concat1 = tempFolder + imageName;
    string concat2 = tempFolder + image200Name;

    curl_formadd(&beginPostList, &endPostList, CURLFORM_COPYNAME, "image",
                 CURLFORM_FILE, &concat1, CURLFORM_END);
    curl_formadd(&beginPostList, &endPostList, CURLFORM_COPYNAME, "thumb",
                 CURLFORM_FILE, &concat2, CURLFORM_END);

    // perform
    curl_easy_setopt(curl, CURLOPT_POST, true);
    curl_easy_setopt(curl, CURLOPT_HTTPPOST, beginPostList);
    CURLcode code = curl_easy_perform(curl);

我当前的错误是没有调用服务器(因为没有创建“queries.txt”),但是如果我删除这些行:

curl_formadd(&beginPostList, &endPostList, CURLFORM_COPYNAME, "image",
             CURLFORM_FILE, &concat1, CURLFORM_END);
curl_formadd(&beginPostList, &endPostList, CURLFORM_COPYNAME, "thumb",
             CURLFORM_FILE, &image200Name, CURLFORM_END);

PHP 脚本被完美调用。那么,为什么 CURL 在添加任何文件时没有调用我的脚本?

提前谢谢你。


编辑:

1.- 我尝试通过设置内容类型来调用它:

curl_formadd(&beginPostList, &endPostList, CURLFORM_COPYNAME, "image",
             CURLFORM_FILE, &concat1,
             CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);

但是什么都没发生


可能的错误:

我尝试不设置任何内容,但我得到 HTTP STATUS = 200,但如果我设置任何要上传的文件,我得到 HTTP STATUS = 0...为什么? p>

【问题讨论】:

  • 这些文件有多大?可能你已经超过了 max_upload_filesize。
  • 52 KB,不是很大,设置为 20 MB ish
  • 在你的第二个curl_formadd上不应该是concat2,而不是image200Name
  • @1nflktd 是的,你是对的,但无论如何它都会发生在任何文件中。我要编辑它。感谢您的注意。

标签: php c++ curl


【解决方案1】:

当它需要 c 字符串

时,您正在传递一个 c++ 字符串

试试:

curl_formadd(&beginPostList, &endPostList, CURLFORM_COPYNAME, "image",
             CURLFORM_FILE, concat1.c_str(), CURLFORM_END);
curl_formadd(&beginPostList, &endPostList, CURLFORM_COPYNAME, "thumb",
             CURLFORM_FILE, concat2.c_str(), CURLFORM_END);

【讨论】:

  • 当我收到你的答案时,我在看到答案之前改变了它......是的!非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 2016-05-31
  • 1970-01-01
  • 2012-09-02
  • 2013-03-15
  • 1970-01-01
  • 2020-10-31
相关资源
最近更新 更多