У меня есть скрипт GAE PHP, который принимает сообщение POSTED, состоящее из $_POST['version_name']
, $_POST['version_comments']
и $_FILES['userfile']['tmp_name'][0]
.POST-файл для PHP из Python
Он запускает file_get_contents
против $_FILES['userfile']['tmp_name'][0]
и хранит двоичный файл в базе данных CloudSQL.
Это конечная точка для формы, основанной на PHP, поэтому пользователи могут загружать новые версии (с именами/комментариями) через дружественный графический интерфейс из своего браузера. Он работает нормально.
Теперь я хочу иметь возможность использовать тот же обработчик, что и конечная точка для скрипта Python. Я написал это:
r = requests.post('http://handler_url_here/',
data={'version_name': "foo", 'version_comments': "bar"},
files={'userfile': open('version_archive.tar.gz', 'rb')})
version_archive.tar.gz
не является пустым файлом, но file_get_contents($_FILES['userfile']['tmp_name'][0])
возвращается нулем. Загрузка файлов немного сложна с помощью GAE, поэтому я бы предпочел не изменять прослушиватель - есть ли способ заставить Python отправлять свою полезную нагрузку в том же формате, который ожидает слушатель?
$_POST['version_name']
и $_POST['version_comments']
работают должным образом.
может быть что-то о кодировке строк? У меня были некоторые проблемы в прошлом с ними –
Вы используете «php55» runtime и прямую загрузку файлов? Подробнее см. Http://stackoverflow.com/questions/29807050/upload-file-android-to-google-app-engine-php/29808939#29808939. – Mars