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