上传文件通过PHP卷曲PUT

问题描述 投票:3回答:2

说完了不少麻烦PUT婷PDF。我已经成功地得到它邮差做工精​​细,使用下面的代码(大码块),并通过身体的表单数据附加的PDF。我想在PHP现在复制这一点。我有麻烦,虽然附加的PDF。 HALP请!

我已经试过许多技术尝试通过“CURLOPT_INFILE”,“CURLOPT_POSTFIELDS”无济于事附加的PDF。

我通过创建文件:

$pdf = $_SERVER['DOCUMENT_ROOT'] . '/pdf/temp/temp.pdf';
$file = curl_file_create($pdf, 'application/pdf', 'receipt');`

要么

$file = new CURLFile($pdf, 'application/pdf', 'receipt');

我已经尝试使用:

$file = fopen($pdf, 'rb');
$file = array('file' => $file);

CURLOPT_POSTFIELDS      => $file,
CURLOPT_INFILESIZE      => $fileSize,
CURLOPT_INFILE          => $file

没有运气,虽然。

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://staging-tallie.com/v2/enterprise/ENTERPRISEID/MyReceipt/",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "PUT",
  CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n\r\n-----011000010111000001101001--",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json; charset=utf-8",
    "cache-control: no-cache",
    "content-type: multipart/form-data; boundary=---011000010111000001101001",
    "token: TOKEN",
    "upload-filename: receipt.pdf"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

错误如下:

<?xml version="1.0" encoding="utf-8"?>
<ErrorResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ResponseCode>400</ResponseCode>
    <Message>Unable to Save the file to the Storage Service.</Message>
</ErrorResponse>
php pdf curl postman
2个回答
2
投票

400是指示该请求是不可能满足一个HTTP响应代码。也就是说,与伴随的消息文本,表明PHP进程没有到目标目录的写权限。


0
投票

此代码,以将文件上传到云bluemix对​​象存储为我工作。文件从临时文件夹上传表格后提交使用PUT方法。不要忘记上传之前验证文件的MIME和扩展。

if (is_uploaded_file($_FILES['my_file']['tmp_name'])){
    $ch = curl_init();

    $url = IBM_BLUEMIX_BUCKET_END_POINT.$bucket_name."/".$file_name; // give the file a unique name


    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_PUT, true); //PUT REQUEST                
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'x-amz-acl: public-read', //header required for bluemix 
        'Authorization: Bearer '.$access_token, // authorization for bluemix iam
        'Content-Type: '.$conten_type, //application/pdf or image/jpg
        'Expect: '
    ));

    $image_or_file = fopen($_FILES['my_file']['tmp_name'], "rb");

    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    curl_setopt($ch, CURLOPT_INFILE, $image_or_file);
    curl_setopt($ch, CURLOPT_INFILESIZE, $_FILES[$fieldName]['size']);

    curl_setopt(
        $ch,
        CURLOPT_POSTFIELDS,
        array(
          'file' =>
              '@'            . $_FILES['my_file']['tmp_name']
              . ';filename=' . $_FILES['my_file']['name']
              . ';type='     . $conten_type //application/pdf or image/jpg
    ));

    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,16);
    curl_setopt($ch,CURLOPT_TIMEOUT, 20);
    curl_setopt($ch, CURLINFO_HEADER_OUT, true); // enable tracking

    $response = curl_exec($ch);
    $headerSent = curl_getinfo($ch ); // request headers from response (check if something wrong)

    curl_close ($ch);
    fclose($image_or_file);

    if(!$response){ // or response
       // do something...
    }
}else{
    //File did not upload, do something ...
}
© www.soinside.com 2019 - 2024. All rights reserved.