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.2k 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.
  • J Offline
    J Offline
    jmimi
    wrote on last edited by
    #12

    کد سرور لوکالتون چیه؟ یعنی می تونید اون رو بدید با اون تست کنم؟
    تغییری ندادم.
    شما طرف سرور می تونید ببینید که اون فایل داره میاد یا نه؟

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

      متاسفانه منظورتون از کد سرور رو نمیدونم چی هست
      من ی هندلر خطا هم اضافه کردم به این صورت
      در کلاس
      uploader
      و متد
      upload
      من این کد رو اضافه کردم
      @self._reply.error.connect(self.handleError)@
      و بعدش این متد رو تعریف کردم
      @def handleError(self):
      print(self._reply.errorString())@

      وقتی که خطا رو پرینت میکنه مینویسه
      Connection refused

      آدرس رو هم این گذاشتم
      http://localhost:12345/01/upload/123.html
      ولی فایده ای نداره
      نمیدونم چطور اینکارو کنم که ببینم فایل میاد یا خیر

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

        منظورم از کد سرور همین برنامه طرف سروره که روی پورت ۱۲۳۴۵ آوردید بالا.

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

          راستش این دقیقا همین چیزیه که من متوجه نمیشم
          من اصلا پورتی تعیین نکردم
          این ۱۲۳۴۵ هم روی همون کد بود !
          من باید روی پورت ۸۰ کار کنم چون فکر کنم وبسایت های
          xfilesharing و کلا apache
          روی همین پورت هستش
          وقتی هم که :۱۲۳۴۵ رو برمیدارم قبل از اینکه پیام تمام شدن آپلود رو بده مینویسه
          operation canceled

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

            این فایل داره از یک مبدایی به نام برنامه شما به یک مقصدی به نام سرور میره.
            من فکر می کنم که شما اصلا سروری ندارید. یعنی برنامه طرف سرور ندارید که دارید تست می کنید.
            کانکشن ویفیوز هم به همین خاطره. یعنی هیچی تو اون آدرسی که شما دارید میدید نیست.
            این http://localhost:12345/01/upload/123.html خالیه.
            باید یک برنامه سرور روی این آدرس باشه تا بتونه فایل شما رو بگیره و گر نه چی میخواد فایل شما بگیره؟!

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

              دوستم واقعا ممنونم از کمکت به من
              منظورتون از برنامه سرور همون وب سرور هستش ؟
              من روی لوکال آپاچی دارم
              اون سایتی هم که در آخر باید روش کار کنم اسکریپت
              xfilesharing
              داره که روی آپاچی هستش
              ببخشید واقعا من در این زمینه اطلاعات ضعیفی دارم و دقیقا نمیدونم باید چیکار کنم.به همین خاطر به مشکل خوردم
              ممنون

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

                خواهش می کنم.
                آره منظور همون وب سروره
                همین آپاچی خودش وب سروره ولی کار خاصی نمی کنه.
                شما باید یک برنامه ای داشته باشید که فایل رو ذخیره می کنه و روی این آپاچی بیاریدش بالا.
                آپاچی فقط پروتکل http رو پیاده سازی کرده . البته خیلی کارای دیگه می کنه که الان به دردمون نمی خوره.
                آپاچی رکوئست رو می گیره و تحویل اون برنامه ای میده که داره فایل رو ذخیره می کنه و روی خودش هاست کرده. هاست کرده یعنی اینکه آورده بالا.
                این برنامه هه همونیه که بهش اشاره کردم برنامه طرف سرور.

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

                  خیلی ممنون از کمکتون دوستم
                  دوستم الان ی سری برنامه ها هستن که فایل رو آپلود میکنن روی هاست های فایل مثل "این":http://z-o-o-m.eu/
                  تعداد زیادی هاست هم پشتیبانی میکنه
                  تا اونجایی که من هم اطلاع دارم برای همین هاست مورد نظر من برنامه ای با زبان پرل نوشته شده که خود به خود فرم اچ تی ام ال رو پیدا میکنه(طبق هدر هایی که ارسال میشه) و فایل رو سابمیت میکنه بدون برنامه خاصی
                  راهی هست که به این صورت بشه کار رو پیش برد ؟
                  و اگر جواب منفی هستش
                  میشه مستنداتی و یا مقاله ی ساده ای در این رابطه و همچنین اسم برنامه رو بگین تا من روی این کار کنم ؟
                  ممنون

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

                    نه اینا به درد این کار نمی خوره. چون اینا یک کلاینت هستند.
                    چیزی که مدنظر شماست اینه که کار همین ها رو انجام بدید.
                    مگر اینکه یکی از این اپلیکیشن ها باشند که اپی داشته باشند و شما از اپی اونا تو برنامه کیوت خودتون استفاده کنید. اون موقع از شر اون اچ تی تی پی بازیا هم خلاص می شید.
                    اگر هم اینا اپی ندارند و می خواید که روی یک اپلیکیشن سرور کار کنید ، یه سرچ بزنید که مثلا سمپل کد آپلود فایل تو پی اچ پی رو داشته باشه. بعدش اونو توی آپاچی بیاریدش بالا.

                    1 Reply Last reply
                    0
                    • 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