python - загрузить файл, используя POST - PullRequest
0 голосов
/ 25 января 2020

Я запускаю python на одном сервере и хочу загрузить некоторые файлы на второй сервер. Когда я запускаю сценарий python, файлы не перемещаются на второй сервер.

Код Python для скрипта на первом сервере:

url = 'https://www.example.com/incoming.php'

for x in list:
    if os.path.exists(x):
        filename = os.path.abspath(x) #get the full path of a file
        new_name = filename.replace('/', '_') #replace the / with _
        new_name_zip = new_name + '.zip'

        shutil.copy(x, new_name) #copy the file and give it a new name
        zippy = zipfile.ZipFile(new_name_zip, 'w', zipfile.ZIP_DEFLATED)
        zippy.write(new_name)
        os.remove(new_name) #remove the unzipped file

        uploadFile = {'uploadFile': (new_name_zip, open(new_name_zip, 'rb'))}
        r = requests.post(url, files=uploadFile)
        print (r.status_code)
        print (r.reason)

Код для входящего. php на втором сервере:

    $name=$_FILES['uploadFile']['name'];
    $size=$_FILES['uploadFile']['size'];
    $type=$_FILES['uploadFile']['type'];
    $tmp_name=$_FILES['uploadFile']['tmp_name'];
    $error=$_FILES['uploadFile']['error'];
    $location='uploads/';

    if(move_uploaded_file($tmp_name, $location.$name)) {
        $myfile = fopen("newfile.txt", "w");
        $txt = "Success\n";
        fwrite($myfile, $txt);
        fclose($myfile);
    }
?>

Вся структура каталогов и все файлы на втором сервере принадлежат www-data. Код ответа, который я получаю при запуске сценария на первом сервере, - «500 Internal Server Error». Я использую Python 2.7 в Ubuntu 18.04 на первом сервере и стек LAMP в Ubuntu 18.04 на втором сервере.

1 Ответ

0 голосов
/ 28 января 2020

ОК, я сократил код и заставил его работать успешно. Рабочий код:

#!/usr/bin/python3

import requests

url = 'http://example.com/receiver.php'
filename = 'file.txt'

up = {'uploadedFile':(filename, open(filename, 'rb'), 'multipart/form-data')}
r = requests.post(url, files=up)

print (str(r.status_code) + ' ' + r.reason)

, а код PHP на стороне сервера (/ var / www/html):

<?php
$fileTmpPath = $_FILES['uploadedFile']['tmp_name'];
$fileName = $_FILES['uploadedFile']['name'];
$fileSize = $_FILES['uploadedFile']['size'];

$uploadFileDir = 'uploads/';
$dest_path = $uploadFileDir . $fileName;

move_uploaded_file($fileTmpPath, $dest_path)
?>
...