gpt4 book ai didi

Php 使用 cURL 将图片上传到远程服务器

转载 作者:可可西里 更新时间:2023-10-31 23:02:38 28 4
gpt4 key购买 nike

我想在 php 中使用 cURL 将图像上传到远程图像服务器。我有这段代码,它在网络服务器上:

<form enctype="multipart/form-data" encoding="multipart/form-data" method="post" action="webform.php">
<input name="somevar" type=hidden value='.$somevar.'>
<input name="uploadfile" type="file" value="choose">
<input type="submit" value="Upload">
</form>

和:

if (isset($_FILES['uploadfile']) ) {

$filename = $_FILES['uploadfile']['tmp_name'];
$handle = fopen($filename, "r");
$data = fread($handle, filesize($filename));
$POST_DATA = array(
'somevar' => $somevar,
'uploadfile' => $data
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://1.1.1.1/receiver.php');
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $POST_DATA);
$response = curl_exec($curl);
curl_close ($curl);
echo $response;

}

在图像服务器上我有一个图像上传处理 php 文件,它在本地主机上工作得很好,但我想在远程服务器上使用它。这是我在 receiver.php 中处理上传的图像文件的方式:

move_uploaded_file($_FILES['uploadfile']['tmp_name'], $file)

我想直接将图片文件传递给远程服务器脚本,这样我就不需要重写整个上传脚本了。我试图将图像名称、类型、大小作为发布变量发布,但我没有得到 ['tmp_name'],因为它不在本地主机上。

我该如何解决这个问题?谢谢大家的帮助!

最佳答案

这是一个可能的解决方案;

  • 在您的网络服务器上处理上传并将上传的文件移动到本地临时位置
  • 然后向远程服务器发出 curl POST 请求并告诉它上传的文件名和数据是什么;作为 base64_encoded 字符串
  • 远程服务器脚本将上传作为标准的 http post 接收
  • 现在要做的就是解码文件数据,保存为指定的文件名

所以,这就是解决方案的样子:

抱歉,我没有对此进行测试,但它应该可以工作。

index.php

<?php

// Handle upload
if(isset($_POST["submit"]))
{
// Move uploaded file to a temp location
$uploadDir = '/var/www/uploads/';
$uploadFile = $uploadDir . basename($_FILES['userfile']['name']);
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadFile))
{
// Prepare remote upload data
$uploadRequest = array(
'fileName' => basename($uploadFile),
'fileData' => base64_encode(file_get_contents($uploadFile))
);

// Execute remote upload
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://1.1.1.1/receiver.php');
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $uploadRequest);
$response = curl_exec($curl);
curl_close($curl);
echo $response;

// Now delete local temp file
unlink($uploadFile);
}
else
{
echo "Possible file upload attack!\n";
}
}

?>

<!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action="index.php" method="POST">
<!-- MAX_FILE_SIZE must precede the file input field -->
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<!-- Name of input element determines name in $_FILES array -->
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>

然后,在 receiver.php 上,您可以执行以下操作:

// Handle remote upload
if (isset($_POST['fileName']) && $_POST['fileData'])
{
// Save uploaded file
$uploadDir = '/path/to/save/';
file_put_contents(
$uploadDir. $_POST['fileName'],
base64_decode($_POST['fileData'])
);

// Done
echo "Success";
}

关于Php 使用 cURL 将图片上传到远程服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35776859/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com