예제 #1
0
def generate_multipart_data(text_dict=None, file_dict=None):
    multipart_data = QHttpMultiPart(QHttpMultiPart.FormDataType)
    if text_dict:
        for key, value in text_dict.items():
            text_part = QHttpPart()
            text_part.setHeader(QNetworkRequest.ContentDispositionHeader,
                                "form-data;name=\"%s\"" % key)
            text_part.setBody(str(value).encode("utf-8"))
            multipart_data.append(text_part)
    if file_dict:
        for key, file in file_dict.items():
            file_part = QHttpPart()
            filename = QFileInfo(file.fileName()).fileName()
            file_part.setHeader(
                QNetworkRequest.ContentDispositionHeader,
                "form-data; name=\"%s\"; filename=\"%s\"" % (key, filename))
            file_part.setBodyDevice(file)
            file.setParent(multipart_data)
            multipart_data.append(file_part)
    return multipart_data
예제 #2
0
    def genReqStr(value: Dict[str, Any],
                  prefix="",
                  multiPart=None) -> QHttpMultiPart:
        if not multiPart:
            multiPart = QHttpMultiPart(QHttpMultiPart.FormDataType)

        if isinstance(
                value,
            (QtCore.QFile,
             io.BufferedReader)):  # file content must be a QFile object
            # FIXME: This is broken. IoBufferedReader will be read to memory entirely - not streamed!!
            if "name" in dir(value):
                fileName = value.name
            elif "fileName" in dir(value):
                fileName = value.fileName()
            try:
                mimetype, encoding = mimetypes.guess_type(fileName,
                                                          strict=False)
                mimetype = mimetype or "application/octet-stream"
            except:
                mimetype = "application/octet-stream"
            filePart = QHttpPart()
            filePart.setHeader(QNetworkRequest.ContentTypeHeader, mimetype)
            filePart.setHeader(
                QNetworkRequest.ContentDispositionHeader,
                'form-data; name="{0}"; filename="{1}"'.format(
                    prefix, os.path.basename(fileName)))
            if isinstance(value, io.BufferedReader):
                filePart.setBody(value.read())
            else:
                filePart.setBodyDevice(value)
                value.setParent(multiPart)
            multiPart.append(filePart)
        elif isinstance(value, list):
            if not value:
                otherPart = QHttpPart()
                otherPart.setHeader(QNetworkRequest.ContentTypeHeader,
                                    "application/octet-stream")
                otherPart.setHeader(QNetworkRequest.ContentDispositionHeader,
                                    'form-data; name="{0}"'.format(prefix))
                otherPart.setBody(b"")
                multiPart.append(otherPart)
            elif any([isinstance(x, dict) for x in value]):
                for idx, v in enumerate(value):
                    NetworkService.genReqStr(
                        v, (prefix + "." if prefix else "") + str(idx),
                        multiPart)
            else:
                for val in value:
                    logger.debug("serializing param item %r of list value %r",
                                 val, prefix)
                    textPart = QHttpPart()
                    textPart.setHeader(QNetworkRequest.ContentTypeHeader,
                                       "application/octet-stream")
                    textPart.setHeader(
                        QNetworkRequest.ContentDispositionHeader,
                        'form-data; name="{0}"'.format(prefix))
                    textPart.setBody(str(val).encode("utf-8"))
                    multiPart.append(textPart)
        elif isinstance(value, dict):
            if prefix:
                prefix += "."
            for k, v in value.items():
                NetworkService.genReqStr(v, prefix + k, multiPart)
        #elif value is None:
        #return multiPart
        else:
            if value is None:
                value = ""
            otherPart = QHttpPart()
            otherPart.setHeader(QNetworkRequest.ContentTypeHeader,
                                "application/octet-stream")
            otherPart.setHeader(QNetworkRequest.ContentDispositionHeader,
                                'form-data; name="{0}"'.format(prefix))
            otherPart.setBody(str(value).encode("utf-8"))
            multiPart.append(otherPart)
        return multiPart