روش آپلود کردن در python /pyqt(pyside)
-
نه اینا به درد این کار نمی خوره. چون اینا یک کلاینت هستند.
چیزی که مدنظر شماست اینه که کار همین ها رو انجام بدید.
مگر اینکه یکی از این اپلیکیشن ها باشند که اپی داشته باشند و شما از اپی اونا تو برنامه کیوت خودتون استفاده کنید. اون موقع از شر اون اچ تی تی پی بازیا هم خلاص می شید.
اگر هم اینا اپی ندارند و می خواید که روی یک اپلیکیشن سرور کار کنید ، یه سرچ بزنید که مثلا سمپل کد آپلود فایل تو پی اچ پی رو داشته باشه. بعدش اونو توی آپاچی بیاریدش بالا. -
خیلی ممنون از لطف تون
من با اطلاعاتی که شما بهم دادین باز هم تحقیق میکنم و اگر مشکلی داشتم(البته بازم ببخشید از سوالای زیاد من) سوالم رو همینجا مطرح میکنم
موفق باشید -
سلام
خب بعد از ی سری جستجو ها به ی جاهایی رسیدم
"اینجا":http://paste.ofcode.org/4VQqLdMTTybPYL6HbBfcf2 یک کد هستش که بر روی آپلود روی
http
کار میکنه.منم کد خودمو رو طبق اون تغییر دادم ولی برنامه کرش میکنه و بسته میشه.کد برنامه منم "اینجاست":http://paste.ofcode.org/34B4t8QWF9dFEaa9nSMrRMP
من متوجه نشدم کجای کار رو اشتباه انجام میدم.ی کمکی میدی شما ؟ ممنون -
سلام
چند تا مشکل وجود داره
۱) هنوز برنامه سرور رو راه ننداختید
۲) اون فایلی که باید آپلود بشه همونیه که تو سمپل ها اومده. این یعنی اینکه اون فایل رو هم من حدس میزنم که اصلا روی سیستم شما وجود نداره.
البته مشکل اصلی که کرش می کنه از این نیست.
من پایتون نمی دونم ولی اگر اون نتورک منجر رو توی خود متد آپلود بسازید اون موقع کرشی در کار نیست. نمیگم که این راه حله ها. فقط می گم که یه هینتی باشه برای حلش. -
ممنون از کمکتون
این کد کامل برنامه نیست.ی جورایی فقط برای اینه که نشون بدم چیکار میکنم
وب سرور که از همون آپاچی میشه استفاده کردن.روی
http
پست میکنه اونور با پی اچ پی میگیریم
ممنون از کمکتون.همین الان امتحان میکنم -
سلام
من مشکل کرش کردن رو حل کردم.گویا بعد از ارسال
reply
کلا بسته میشد
الان کد اینه.ولی هنوز کد روی
http
آپلود نمیکنه.شما فکر میکنی بخش آپلودر چیزی کم داشته باشه؟هرکی نشون میدم میگه این کامله ظاهرا و باید کار کنه
@from PyQt4 import QtCore, QtGui, QtNetwork
import sys
class Window(QtGui.QWidget):
def init(self, parent=None):
super(Window, self).init(parent)self.netaccess = QtNetwork.QNetworkAccessManager(self) self._uploaders = {} row = 1 #this number will change per upload in real program,this is just demo self.address = 'http://localhost/01/upload/demo.php' stream = QtCore.QFile('/home/patriot/hello.jpg') if stream.open(QtCore.QIODevice.ReadOnly): data = stream uploader = self._uploaders[row] = Uploader(row, self.netaccess) uploader.upload(data, self.address)
class Uploader(QtCore.QObject):
def __init__(self, key, parent): QtCore.QObject.__init__(self, parent) self._key = key self._reply = None def upload(self, data, url): if self._reply is None: self._stream = data self._multiPart = QtNetwork.QHttpMultiPart(QtNetwork.QHttpMultiPart.FormDataType) fileName = QtCore.QFileInfo(self._stream.fileName()).fileName() key = 'file' imagePart = QtNetwork.QHttpPart() imagePart.setHeader(QtNetwork.QNetworkRequest.ContentDispositionHeader, "form-data; name=\"%s\"; filename=\"%s\"" % (key, fileName)) imagePart.setHeader(QtNetwork.QNetworkRequest.ContentTypeHeader, 'image/png') imagePart.setBodyDevice(self._stream) self._multiPart.append(imagePart) request = QtNetwork.QNetworkRequest(QtCore.QUrl(url)) request.setHeader(QtNetwork.QNetworkRequest.ContentTypeHeader,
'multipart/form-data; boundary=%s' % self._multiPart.boundary())
request.setRawHeader('User-Agent','Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36')self._reply = self.parent().post(request, self._multiPart) self._reply.uploadProgress.connect(self.handleUploadProgress) self._reply.error.connect(self.handleError) self._reply.finished.connect(self.handleFinished) def handleUploadProgress(self, sent, total): #if sent >= total: # prevent duplicated uploads #self._reply.close() print() def handleFinished(self): print('Content: ',self._reply.readAll())#no output here :( self._stream.close() self._multiPart.deleteLater() self._reply.deleteLater() self._reply = None app.quit() def handleError(self): print('Error String :',self._reply.errorString()) print('Error number: ',self._reply.error())
app = QtGui.QApplication(sys.argv)
demo = Window()
sys.exit(app.exec_())@ -
آقا مشکل حل شد
بعد از چندین روز تلاش تصادفی متوجه شدم که پای کیوت روی پایتون ۳ باگ داره
در حقیقت این کد خیلی خوب روی پایتون ۲ کار میکنه ولی پایتون ۳ کار نمیکنه
بازم ممنون -
ممنون
برای کسانی که میخوان بدونن مشکل چیه.با برنامه
wireshark
من این دو هدر رو گرفته شد.اولی با پایتون ۲
@MIME Multipart Media Encapsulation, Type: multipart/form-data, Boundary: "boundary_.oOo.Nzc0MjMxOTU4MTgyMzc5MTk0Mw==NzIxMTQzNjA4"@
و در پایتون ۳
@MIME Multipart Media Encapsulation, Type: multipart/form-data, Boundary: "b'boundary.oOo._NjY2OTgyMTQ3MTg1NTk1MzgyNw==NDY5Njg1NTMw'"@
به قسمت
boundary
دقت کنید که به بایت تبدیل شده در پایتون ۳ و رشته متنی نیست
من این مشکل رو گزارش دادم تا درست کنند
موفق باشید