Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Persian
  4. روش آپلود کردن در python /pyqt(pyside)
Forum Updated to NodeBB v4.3 + New Features

روش آپلود کردن در python /pyqt(pyside)

Scheduled Pinned Locked Moved Persian
29 Posts 2 Posters 15.3k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    Mohammadhzp
    wrote on last edited by
    #21

    خیلی ممنون از لطف تون
    من با اطلاعاتی که شما بهم دادین باز هم تحقیق میکنم و اگر مشکلی داشتم(البته بازم ببخشید از سوالای زیاد من) سوالم رو همینجا مطرح میکنم
    موفق باشید

    1 Reply Last reply
    0
    • J Offline
      J Offline
      jmimi
      wrote on last edited by
      #22

      خواهش می کنم.
      فروم برای سوال پرسیدن و جواب دادن ه دیگه

      1 Reply Last reply
      0
      • M Offline
        M Offline
        Mohammadhzp
        wrote on last edited by
        #23

        سلام
        خب بعد از ی سری جستجو ها به ی جاهایی رسیدم
        "اینجا":http://paste.ofcode.org/4VQqLdMTTybPYL6HbBfcf2 یک کد هستش که بر روی آپلود روی
        http
        کار میکنه.منم کد خودمو رو طبق اون تغییر دادم ولی برنامه کرش میکنه و بسته میشه.کد برنامه منم "اینجاست":http://paste.ofcode.org/34B4t8QWF9dFEaa9nSMrRMP
        من متوجه نشدم کجای کار رو اشتباه انجام میدم.ی کمکی میدی شما ؟ ممنون

        1 Reply Last reply
        0
        • J Offline
          J Offline
          jmimi
          wrote on last edited by
          #24

          سلام
          چند تا مشکل وجود داره
          ۱) هنوز برنامه سرور رو راه ننداختید
          ۲) اون فایلی که باید آپلود بشه همونیه که تو سمپل ها اومده. این یعنی اینکه اون فایل رو هم من حدس میزنم که اصلا روی سیستم شما وجود نداره.
          البته مشکل اصلی که کرش می کنه از این نیست.
          من پایتون نمی دونم ولی اگر اون نتورک منجر رو توی خود متد آپلود بسازید اون موقع کرشی در کار نیست. نمیگم که این راه حله ها. فقط می گم که یه هینتی باشه برای حلش.

          1 Reply Last reply
          0
          • M Offline
            M Offline
            Mohammadhzp
            wrote on last edited by
            #25

            ممنون از کمکتون
            این کد کامل برنامه نیست.ی جورایی فقط برای اینه که نشون بدم چیکار میکنم
            وب سرور که از همون آپاچی میشه استفاده کردن.روی
            http
            پست میکنه اونور با پی اچ پی میگیریم
            ممنون از کمکتون.همین الان امتحان میکنم

            1 Reply Last reply
            0
            • M Offline
              M Offline
              Mohammadhzp
              wrote on last edited by
              #26

              سلام
              من مشکل کرش کردن رو حل کردم.گویا بعد از ارسال
              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_())@

              1 Reply Last reply
              0
              • M Offline
                M Offline
                Mohammadhzp
                wrote on last edited by
                #27

                آقا مشکل حل شد
                بعد از چندین روز تلاش تصادفی متوجه شدم که پای کیوت روی پایتون ۳ باگ داره
                در حقیقت این کد خیلی خوب روی پایتون ۲ کار میکنه ولی پایتون ۳ کار نمیکنه
                بازم ممنون

                1 Reply Last reply
                0
                • J Offline
                  J Offline
                  jmimi
                  wrote on last edited by
                  #28

                  آها خیلی خوب
                  من یه جواب به پست قبلی شما دادم ولی مثل اینکه اینترنتم مشکل داشت و الان می بینم که جواب ثبت نشده.
                  خوبه که حل شد

                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    Mohammadhzp
                    wrote on last edited by
                    #29

                    ممنون
                    برای کسانی که میخوان بدونن مشکل چیه.با برنامه
                    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
                    دقت کنید که به بایت تبدیل شده در پایتون ۳ و رشته متنی نیست
                    من این مشکل رو گزارش دادم تا درست کنند
                    موفق باشید

                    1 Reply Last reply
                    0

                    • Login

                    • Login or register to search.
                    • First post
                      Last post
                    0
                    • Categories
                    • Recent
                    • Tags
                    • Popular
                    • Users
                    • Groups
                    • Search
                    • Get Qt Extensions
                    • Unsolved