首页 > 其他 > 详细

requests库获取图片响应流进行转发

时间:2021-01-30 10:32:07      阅读:33      评论:0      收藏:0      [点我收藏+]

遇到了一个问题,使用requests进行转发 requests响应流的时候,出现各种问题,问题的描述没有记录,不过Debug以下终于解决了问题。。。。。。。下面简单的描述解决方案

 

response = _RequestUtil.post_request_server("upload", data={
                    "blockByteSize": imageBuffer.nbytes,
                    "currentBlockIndex": 0,
                    "id": data["id"]
                }, files={
                    "multipartFile": imageBuffer
                })
表单中的请求参数放到data中,文件数据放到files字典中

requests的属性files会通过判断几个类型进而决定是否携带数据流

 

for field, val in fields:  # 这个for语句决定data字典中的属性
            if isinstance(val, basestring) or not hasattr(val, __iter__):
                val = [val]
            for v in val:
                if v is not None:
                    # Don‘t call str() on bytestrings: in Py3 it all goes wrong.
                    if not isinstance(v, bytes):
                        v = str(v)

                    new_fields.append(
                        (field.decode(utf-8) if isinstance(field, bytes) else field,
                         v.encode(utf-8) if isinstance(v, str) else v))

        for (k, v) in files:  # 这个files决定了你传的files属性的值,进行遍历
            # support for explicit filename
            ft = None
            fh = None
            if isinstance(v, (tuple, list)): # 判断你传的元组的个数,选择不同的行为
                if len(v) == 2:
                    fn, fp = v
                elif len(v) == 3:
                    fn, fp, ft = v
                else:
                    fn, fp, ft, fh = v
            else:
                fn = guess_filename(v) or k
                fp = v

            if isinstance(fp, (str, bytes, bytearray)):  # 这里是文件对象的关键之处,当files的键对应的值是以下时,会携带上的
                fdata = fp
            elif hasattr(fp, read): # 这里也就是判断以下对应的值对象是否包含read方法
                fdata = fp.read()
            elif fp is None:
                continue
            else:
                fdata = fp


       rf = RequestField(name=k, data=fdata, filename=fn, headers=fh) # 最终文件对象会打包成 RequestField 对象
       rf.make_multipart(content_type=ft)

       # new_fields 这个是最终保存所有字段的列表对象
       new_fields.append(rf)

 

 如有疑问,留言讨论

requests库获取图片响应流进行转发

原文:https://www.cnblogs.com/XingXiaoMeng/p/14347741.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!