Я пытаюсь загрузить файл с помощью 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?