Загрузка файла с использованием почтового запроса Python - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь загрузить файл с помощью urllib, Python post-запроса на загрузку данных в php на стороне сервера.

Я успешно протестировал эту программу в моей системе Linux и работает отлично, но когда я тестирую свою программу в Windows, отображаются некоторые ошибки, связанные с кодировкой, я перепробовал все, что доступно в stackoverflow и других Google, но ничего не связано с этой ошибкой.

Вот моя клиентская программа:

#!/usr/bin/env python
import urllib.request  as urllib2
from urllib.request import urlencode
import urllib.parse 
import os, os.path, sys
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
from time import sleep

register_openers()
query = { 'id' : 1 }
url = "http://192.168.0.1/fght/server.php?"+urllib.parse.urlencode(query)
path = "c:\\Users\\user\\Desktop\\images\\"
for f in os.listdir(path):
  print(f);
  filename = path+f;
  print ('Saved: '+filename);
  if (os.path.isfile(filename)) :
        values = {'image':open(filename)}
        print("working");
        headers = ('utf-8')
        encoding="utf-8"
        data, headers = multipart_encode(values)
        headers['User-Agent'] = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
        headers['filename'] = filename
        print('hhh')
        req = urllib2.Request(url, data, headers)
        req.unverifiable = True
        content = urllib2.urlopen(req).read()
        print ('Upload Complete');
  else:
    print ('Upload failed.');

и Php на стороне сервера:

<?php

if (!isset($_GET['id'])) {
  echo ('Invalid request!');
  exit(0);
}
$id = intval($_GET['id']);

$image = $_FILES["image"]["name"];

if ($image == null) {
   echo ("Missing image!");
   exit(0);
} else {
   echo "Saved image!";
   $filename = $image;
   $tmp_name = $_FILES["image"]["tmp_name"];
   move_uploaded_file($tmp_name, $filename);
}
?>

Я установил всю нужную библиотеку и все еще получил сообщение об ошибке ниже -

C:\Users\user\Desktop\final\sendfilephp>python client.py
images1 - Copy (2).PNG
Saved: c:\Users\user\Desktop\images\images1 - Copy (2).PNG
working
Traceback (most recent call last):
  File "client.py", line 26, in <module>
    data, headers = multipart_encode(values)
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\p
oster-0.8.1-py3.7.egg\poster\encode.py", line 411, in multipart_encode
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\p
oster-0.8.1-py3.7.egg\poster\encode.py", line 311, in get_headers
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\p
oster-0.8.1-py3.7.egg\poster\encode.py", line 302, in get_body_size
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\p
oster-0.8.1-py3.7.egg\poster\encode.py", line 177, in from_params
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\p
oster-0.8.1-py3.7.egg\poster\encode.py", line 94, in __init__
AttributeError: 'bytes' object has no attribute 'encode'

Кто-нибудь может подсказать, что я делаю не так?

Эта программа отлично работает для меня в системе Linux, так почему бы не Windows?

...