requests庫獲取圖片響應流進行轉發

遇到了一個問題,使用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)

 

 
 如有疑問,留言討論
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章