0

私のDRFバックエンドから.ipaファイルをpython Multipartデータエンコーダ(http://toolbelt.readthedocs.io/en/latest/uploading-data.html)を使用してサードパーティのアプリケーションにアップロードしようとしています。しかし、私は 'RB' 属性を削除した場合、私が得る、私は( '接続が中断されました。' BrokenPipeError(32、 '壊れたパイプ'))以下のエラー -CSRFでtoolbelt multipartアップロードファイルが失敗します

を取得しています

無効な継続バイト

誰かがOUをポイントしてくださいでした:

は、位置10のバイト0xe3をデコードすることはできません 'UTF-8' コーデックがinstead-以下のエラー何がここに間違っていますか? Btw、私は巨大なファイルをアップロードする可能性があるので、ツールベルトを使用することに決めました。

from django.views.generic import View 

from django.conf import settings 
import os 
import requests #sudo pip install requests, it's an external library 
from requests_toolbelt.multipart.encoder import MultipartEncoder #pip install requests-toolbelt 



class upload_binary(generics.GenericAPIView): 

def post(self, request, format=None): 

    URL = "http://localhost:9020/" 
    csrf = requests.get(URL).cookies['csrftoken'] 

    post_url = "http://localhost:9020/upload/" 
    upload_file_name = "SomeApp.ipa" 
    media_dir = settings.MEDIA_ROOT 
    upload_file_path = os.path.join(media_dir, upload_file_name) 


    filedata = MultipartEncoder(fields = { 
     'csrfmiddlewaretoken': csrf, 'file1': ('file', open(upload_file_path, 'rb')) 
    }) 
    headersdict = {'X-CSRFToken': csrf, 'Content-Type': filedata.content_type} 
    upload_bin_req = requests.post(post_url, data = filedata, headers = headersdict) 

    return JsonResponse({}) 

答えて

0

人が知る必要がある場合は、自分自身で質問に答える。どうやら、この問題を引き起こしていたのは第三者のアプリのCSRFでした。問題のビューに対してCSRFを無効にすることで、RESTアクセスを許可するサードパーティのコードを更新する必要がありました。私はcsrf_exemptをインポートし、following-

from django.views.decorators.csrf import csrf_exempt 

    ... 
    ... 
    @csrf_exempt 
    def the_third_party_view_I_was_calling(request): 

として、問題のビューを飾るために持っていたいくつかのいずれかが、CSRFを無効にせずにこの問題を解決するためのより良い解決策を知っている場合は、私に知らせてください。

関連する問題