Esempio n. 1
0
 def construct_multipart(self, data, files):
     multi_part = QtNetwork.QHttpMultiPart(
         QtNetwork.QHttpMultiPart.FormDataType)
     for key, value in data.items():
         post_part = QtNetwork.QHttpPart()
         post_part.setHeader(
             QtNetwork.QNetworkRequest.ContentDispositionHeader,
             "form-data; name=\"{}\"".format(key))
         post_part.setBody(str(value).encode())
         multi_part.append(post_part)
     for field, filepath in files.items():
         if filepath:
             file = QFile(filepath)
             if not file.open(QIODevice.ReadOnly):
                 break
             post_part = QtNetwork.QHttpPart()
             post_part.setHeader(
                 QtNetwork.QNetworkRequest.ContentDispositionHeader,
                 "form-data; name=\"{}\"; filename=\"{}\"".format(
                     field, file.fileName()))
             post_part.setBodyDevice(file)
             file.setParent(multi_part)
             multi_part.append(post_part)
         else:
             break
     return multi_part
    def upload_file(file_to_upload, post_url, key, callback):
        """Method for uploading files to GIS Cloud"""
        zip_part = QtNetwork.QHttpPart()
        zip_part_content_disposition = QByteArray(
            'form-data; name="upfile"; filename="{}"'.format(
                os.path.basename(file_to_upload)).encode('utf-8'))
        zip_part.setHeader(QtNetwork.QNetworkRequest.ContentTypeHeader,
                           QByteArray(b'application/json'))
        zip_part.setHeader(QtNetwork.QNetworkRequest.ContentDispositionHeader,
                           zip_part_content_disposition)

        file_handler = QFile(file_to_upload)
        file_handler.open(QIODevice.ReadOnly)
        zip_part.setBodyDevice(file_handler)

        multi_part = QtNetwork.QHttpMultiPart(
            QtNetwork.QHttpMultiPart.FormDataType)
        file_handler.setParent(multi_part)
        multi_part.append(zip_part)

        request = QtNetwork.QNetworkRequest()
        request.setRawHeader(QByteArray(b'X-GIS-CLOUD-APP'),
                             GISCloudNetworkHandler.app_id.encode("utf-8"))
        result = GISCloudNetworkHandler.blocking_request(
            GISCloudNetworkHandler.POST, post_url, key, multi_part, request,
            callback)
        return result