Я пытался загрузить файл в удаленный API через CURL в течение последних нескольких дней без особой удачи. Код отлично работает в Windows, и я получаю желаемый результат, возвращаемый обратно из API.
Моя проблема в том, что как только я перехожу в среду Linux и загружаю файл через CURL, я получаю сообщение об ошибке ниже.
Что я пробовал: Я подумал, что, возможно, причиной моей проблемы были разрешения и подобные, поскольку он говорил, что не может найти файл, поэтому я решил немного изменить свой код, чтобы загрузить на сервер, переместить его в папку для загрузки, а затем выбрать этот файл для отправки через curlfile, но все равно не повезло. Вот ошибка, которую я получаю:
"errors": [
{
"developerMessage": "Error while manipulating file /home/USER/public_html/top/tmp/client17.jpg due to a File system / Amazon S3 issue /usr/share/tomcat7/.fineract/top/documents/clients/1/8q9sr/home/USER/public_html/top/tmp/client17.jpg (No such file or directory)",
"defaultUserMessage": "Error while manipulating file /home/USER/public_html/top/tmp/client17.jpg due to a File system / Amazon S3 issue /usr/share/tomcat7/.fineract/top/documents/clients/1/8q9sr/home/USER/public_html/top/tmp/client17.jpg (No such file or directory)",
"userMessageGlobalisationCode": "error.msg.document.save",
"parameterName": "id",
"value": null,
"args": [
{
"value": "/home/USER/public_html/top/tmp/client17.jpg"
},
{
"value": "/usr/share/tomcat7/.fineract/top/documents/clients/1/8q9sr/home/USER/public_html/top/tmp/client17.jpg (No such file or directory)"
}
]
}
]
Вот код, который я использую:
// UPLOAD NEW FILES
if (ISSET($_FILES))
{
$uploads = array('guarantor_id_card', 'guarantor_payslip_1', 'guarantor_payslip_2', 'guarantor_payslip_3', 'guarantor_bank_1', 'guarantor_bank_2','guarantor_bank_3' );
$postFields = array();
// for creating documents
foreach($uploads as $k => $v)
{
// GET UPLOAD NAME FROM ARRAY
$upload_name = $v;
if (empty($_FILES[$upload_name]['error']))
{
$uploaddir = getcwd() . "/tmp/";
$uploadfile = $uploaddir . basename($_FILES[$upload_name]['name']);
if (move_uploaded_file($_FILES[$upload_name]['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Upload failed";
}
//files
$postFields['file'] = new CURLFile($uploadfile);
//metaData USING COUNTER AND UPLOAD NAME DYNAMIC
$postFields['fileName'] = $_FILES[$upload_name]['name'];
$postFields['type'] = $_FILES[$upload_name]['type'];
$postFields['name'] = 'Supporting Docs';
$postFields['description'] = $_FILES[$upload_name]['name'];
// initialise the curl request
$request = curl_init("https://APIURL_HERE");
// send a file
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_USERPWD, $user . ":" . $password);
curl_setopt($request, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));
curl_setopt($request, CURLOPT_PORT, 8443);
curl_setopt($request, CURLOPT_SAFE_UPLOAD, TRUE);
curl_setopt($request, CURLOPT_POSTFIELDS, $postFields);
// output the response
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($request, CURLOPT_SSL_VERIFYPEER, 0);
$send_request = curl_exec($request);
// close the session
curl_close($request);
echo $send_request;
}
}
echo '<pre>';
echo 'Here is some more debugging info:';
print_r($_FILES);
print_r(getcwd());
echo '<br>';
print_r($uploadfile);
print "</pre>";
}
У меня нет идей, если у кого-то есть опыт в этом, пожалуйста, помогите!
Спасибо.
Никакого доступа к нему вообще нет, это на стороне API. Забавно то, что окна вообще не выдают эту ошибку






"/home/USER/public_html/top/tmp/client17.jpg из-за проблемы с файловой системой / Amazon S3 /usr/share/tomcat7/.fineract/top/documents/clients/1/8q9sr/h ome / USER / public_html / top / tmp / "Эта папка существует и есть ли у вас разрешение на доступ к ней? А почему в ошибке написано «Amazon S3»? Это крепление S3?