2016-10-02 1 views
0

나머지 프레임 워크로 사진을 업로드하고 django 테스트 클라이언트로 테스트하려고합니다. 거의 내가 파일을 저장할 때 그러나 나는 내 파일의 상단에이 작품 : 그 라인을 삭제하면django image upload 나머지 프레임 워크와 테스트 클라이언트

--BoUnDaRyStRiNg 
Content-Disposition: form-data; name="plop.png" 

, 나는 완벽하게 내 그림을 읽을 수 있습니다,하지만 난을 제거하는 방법을 모른다 그들.

models.py

class GenericUser(User): 
    avatar = models.ImageField(upload_to=user_directory_path) 

views.py

class AvatarView(APIView): 
    parser_classes = (FileUploadParser,) 
    def post(self, request): 
     up_file = request.data['file'] 
     user = get_object_or_404(GenericUser, pk=request.user.id) 
     user.avatar.save(up_file.name, up_file) 
     user.save() 
     return Response(status=204) 

tests.py

cl = Client(HTTP_AUTHORIZATION="Token {}".format(token)) 
with open(MY_FILE, 'rb') as f: 
    data = f.read() 
res = cl.post('/avatar', {"plop.png" : data}, HTTP_CONTENT_DISPOSITION="attachment; filename=plop.png;") 

힌트를, 내가 어떻게이 일을 할 수 있을까?

답변

0

내가 예상대로이 일 : views.py

class AvatarView(APIView): 
    parser_classes = (MultiPartParser,) 
    def post(self, request): 
     up_file = request.data["file"] 
     user = get_object_or_404(GenericUser, pk=request.user.id) 
     user.avatar.save(up_file.name, up_file) 
     user.save() 
     return Response(status=204) 

test.py를

cl = Client(HTTP_AUTHORIZATION="Token {}".format(token)) 
with open(MY_FILE, 'rb') as f: 
    res = cl.post('/avatar', {"file" : f}) 
+0

다행입니다. :) – ostergaard

0

이 시도 : 장고 문서에서

res = cl.post('/avatar?filename=plop.png', {"plop.png" : data}) 

이상 이하 :

with open(MY_FILE, 'rb') as f: 
    cl.post('/avatar', {"filename" : f}) 
+0

도와 주셔서 감사합니다. 두 솔루션 모두 실패했습니다. django 테스트 클라이언트가 실제로 HTTP_CONTENT_DISPOSITION = "attachment; filename = plop.png;" FileUploadParser가 이해할 수있는 요청을 포맷합니다 wireshark를 사용하여 무엇이 잘못되었는지 알아 내려고 시도합니다. – Jeremad

+0

:(MultiPartParser를 사용해 보셨습니까? 제거 할 텍스트가 여러 부분으로 된 MIME 파일의 구분 기호처럼 보입니다. 파일 이름이 URL의 일부인 DRF 문서의 제안 : url (r '^ upload/(? P [^ /] +) $', FileUploadView.as_view()) – ostergaard

+0

URL의 일부로 파일 이름이 같음 우리가 말하는 MultiPartParser를 시도 중입니다 – Jeremad