2013-01-02 2 views
3

가능한 중복 :
Django-tastypie: Any example on file upload in POST?django-tastypie에 POST 요청이있는 파일을 어떻게 업로드합니까?

내가 현재 너무

curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"username":"theusername", "api_key":"anapikey", "video_title":"a title", "video_description":"the description"}' http://localhost:8000/api/v1/video/ 

처럼 내 API에 컬을 POST 요청을하지만 지금은 비디오 파일을 추가 할 수 있어야합니다 업로드하십시오. 나는 Tastypie로 파일을 업로드하는 것에 대해 몇 시간 동안 주변을 둘러 보았고 나는 한 가지 확실한 응답을 찾지 못했다. Base64 인코딩을 추가해야합니까? 그렇다면 어떻게? POST 요청으로 파일을 업로드 한 후 파일에 어떻게 액세스합니까? 그냥 정상적인 요청. 파일 작업? 나는 파일을 데이터베이스에 저장하려고하지 않고 그냥 파일 경로를 가져온다.

#Models.py 
class Video(models.Model): 
    video_uploader = models.ForeignKey(User) 
    video_path = models.CharField(max_length=128) 
    video_views = models.IntegerField(default=0) 
    upload_date = models.DateTimeField(auto_now_add=True) 
    video_description = models.CharField(max_length=860) 
    video_title = models.SlugField() 

나는 Tastypie에 대한 파일 업로드 시스템 그래서 어떤 도움은 매우 극명하게 될 것이다을 구현하는 방법에 철저하게 혼란 스러워요. 감사!

답변

13

MultiPart에서 django-tastypie까지 파일을 업로드하는 방법입니다.

Models.py

class Video(models.Model): 
    video_uploader = models.ForeignKey(User) 
    video = models.FileField(_('Video'), upload_to='path_to_folder/') # save file to server 
    video_views = models.IntegerField(default=0) 
    upload_date = models.DateTimeField(auto_now_add=True) 
    video_description = models.CharField(max_length=860) 
    video_title = models.SlugField() 

Api.py

class MultipartResource(object): 
    def deserialize(self, request, data, format=None): 
     if not format: 
      format = request.META.get('CONTENT_TYPE', 'application/json') 
     if format == 'application/x-www-form-urlencoded': 
      return request.POST 
     if format.startswith('multipart'): 
      data = request.POST.copy() 
      data.update(request.FILES) 
      return data 
     return super(MultipartResource, self).deserialize(request, data, format) 

class VideoResource(MultipartResource, ModelResource): 
    """ 
    Inherit this Resource class to `MultipartResource` Class 
    """ 
    # Assuming you know what to write here 
    ... 

그리고 CURL 통해

curl -H "Authorization: ApiKey username:api_key" -F "video=/path_to_video/video.mp3" -F "video_title=video title" http://localhost:8000/api/v1/video/ -v 
관련 문제