2017-08-28 60 views
0

我使用Django restful api + angularjs。 現在,我追加Django在寧靜的API 使用angularjs上傳文件到服務器上的Web前端,在HTML是:Django restful api無法獲取文件內容

<input type="file" data-upload-file id="uploadInputFile"> 

的angularjs的代碼是:

omapp.directive("uploadFile",function(httpPostFactory){ 
    return { 
     restrict:"A", 
     scope:true, 
     link:function(scope,element,attr){ 
      element.bind('change',function(){ 
       var formData = new FormData(); 
       formData.append('file', element[0].files[0]);    
       console.log(formData.get('file'))   

    httpPostFactory('/api/uploadfile/',formData.get('file'),function (callback) { 
         console.log(callback); 
        }) 
       }) 
      } 
     }; 

    }); 

omapp.factory('httpPostFactory', function ($http,$cookies) { 
    return function (file, data, callback) { 
        var req = { 
         method:"POST", 
         url:file, 
         headers:{ 
          'X-CSRFToken':$cookies.get('csrftoken') 
         }, 
         data:{file:data} 
        } 
        $http(req) 
        .then(function successcallback(response){callback(response);}) 

    } 
}); 

一切都OK 。但Django的API無法獲取數據 的代碼是:

class UploadFile(APIView): 
    def post(self,request,format=None): 
     logger.info("file content"); 
     logger.info(request.data) 
     return Response("upload done") 

我怎樣才能得到的數據?

回答

0

你需要從request.FILES

def post(self,request,format=None): 
    file_data = request.FILES['file'] 
    return Response("upload done") 
+0

「request.FILES [」文件']「,抓到一個錯誤:angular.js:14727可能未處理的拒絕... –

+0

未處理的拒絕,它可能是500個關鍵錯誤.check您的瀏覽器控制檯,您的請求數據包含文件內容, – Robert

+0

我收到一個新錯誤:MultiValueDictKeyError at/api/uploadfile/ 「'file'」 –

0

更好的方式來處理文件上傳Django中得到休息的電話,使用的base64格式。在前端將您的文件編碼爲base64字符串,然後在django中再次將其解碼爲原始文件。示例代碼here

0

我得到了anwser: 的HTML是:

<input type="file" data-upload-file id="uploadInputFile"> 

的angularjs是:

omapp.directive("uploadFile",function(httpPostFactory){ 
    return { 
     restrict:"A", 
     scope:true, 
     link:function(scope,element,attr){ 
      element.bind('change',function(){ 
       var formData = new FormData(); 
       formData.append('file', element[0].files[0]);    
       console.log(formData.get('file'))   

    httpPostFactory('/api/uploadfile/',formData.get('file'),function (callback) { 
         console.log(callback); 
        }) 
       }) 
      } 
     }; 

    }); 

omapp.factory('httpPostFactory', function ($http,$cookies) { 
    return function (file, data, callback) { 
        var req = { 
         method:"POST", 
         url:file, 
         headers:{ 
          'X-CSRFToken':$cookies.get('csrftoken'), 
           Content-Type': undefined //add this 
         }, 
         data:{file:data} 
        } 
        $http(req) 
        .then(function successcallback(response){callback(response);}) 

    } 
}); 

寧靜的API:

class UploadFile(APIView): 
    def post(self,request,format=None): 
     logger.info("read file "); 
     up_file = request.FILES['file'] 
     logger.info(up_file) 
當我使用