Пересылка файла

226
18 декабря 2017, 15:13

Нужно на Pythone (3.5) написать клиент отправляющий файл (example.txt) на сервер (000webhost). И серверную часть на php принимающую этот файл и сохраняющую его в некоторую папку. Как это сделать?

Answer 1

Клиент:

#!/usr/bin/env python
import requests
with open('example.txt', 'rb') as file:
    r = requests.post('http://localhost:8000/upload.php', files=dict(file=file))
    r.raise_for_status()

Сервер:

<?php
if (move_uploaded_file($_FILES['file']['tmp_name'], 'some-dir/example.txt')) {
  print "<p>success\n";
} else {
  http_response_code(400);
}
?>

Чтобы попробовать:

$ echo abc >example.txt     # создайте example.txt
$ mkdir some-dir            # создайте папку some-dir
$ php -S localhost:8000 &   # запустите сервер
$ python upload-client.py   # запустите клиент
$ kill %1                   # остановите сервер

Проверьте что успешно загрузился файл:

$ diff -s example.txt some-dir/example.txt
  • встроенный сервер (php -S) предназначен только для разработки и тестирования — не открывайте к нему доступ из интернета. Используйте настоящий веб-сервер типа Nginx. Используйте https (Let's Encrypt). How To Install Linux, Nginx, MySQL, PHP (LEMP stack) in Ubuntu 16.04
  • не доверяйте файлам и метаинформации о файлах, загруженных из интернета — явно проверяйте MIME типы, генерируйте свои имена, папку с загруженными файлами вне корня web-сервера поместите, настройте ограничение на наибольший размер файла на сервере, подумайте об ограничении загрузки только для выбранных пользователей и/или captcha What is the most secure method for uploading a file?
Answer 2

На стороне python скачиваетe какую-то библиотеку для работы с сетью, вроде cURL, составляете multipart from data запрос на сервер, на сервере если он уже настроен, и Apache готов принимать Файлы, прилитит файл во временную папку /tmp, а в PHP опять же если Apache или другой веб сервер настроен, Вы в массиве $_FILES получите все нужные Файлы. Весь это процесс надо настраивать(это очень не сложно), и немного почитать. Вопрос крайне общий, и довольно странный. Я обрисовал все обстрактно но истинно.

READ ALSO
Если идёт селект только одной колонки, могу ли я не использовать fetch_assoc?

Если идёт селект только одной колонки, могу ли я не использовать fetch_assoc?

Настрочил в горячке бредовый код, теперь сижу, исправляюУ меня есть запрос к бд:

223
Проверка сайта на существование

Проверка сайта на существование

Пытаюсь проверить существование домена таким кодом:

234
Проблемы многопоточности у CURL

Проблемы многопоточности у CURL

Возникла проблема перебрать список URL для проверки их валидностиНабросал код для начала, который просто генерирует все возможные вариации...

203