2016-04-15 35 views
1

我正在開發一個使用angular,python和Flask的web應用程序。 在我的應用程序中有一個表單,用戶需要輸入一些數據並上傳他的照片。 我想用角度來實現文件上傳到服務器。 我看到我需要使用FormData()並使用「watch」將數據從HTML綁定到角度。 javascript部分很清晰。 我不明白我如何從Python端獲取數據。angularjs + python(Flask)文件上傳到服務器

這是我的HTML -

<form enctype="multipart/form-data" ng-submit="submitGuideDetailsForm()"> 
    <div class="form-group"> 
    <label for="usr">Add your photo:</label> 
    <input type='file' class="form-control" name='file' onchange="angular.element(this).scope().uploadFile(this.files)"> 
    </div> 
</form> 

這是我的角度 -

$scope.uploadFile = function(files) { 
      $scope.file = new FormData(); 
      $scope.file.append("file", files[0]); 
     }; 
$scope.submitGuideDetailsForm= function() { 
    $http.post('/uploadFile', $scope.file, { 
      headers: {'Content-Type': undefined }, 
      transformRequest: angular.identity 
      }).success(function(results) 
      { 
       $log.log('success load file') 
      }).error(function(error) 
      { 
       $log.log('error load file!!!!!') 
       $log.log(error); 
      }); 
     }; 

我想在服務器端的文件,使用python和瓶 -

@app.route('/uploadFile', methods=['POST']) 
def uploadFile(): 
    json_data = request.json 
    print(json_data) 
    status = 'success' 
    return jsonify({'result': status}) 

我不知道如何從'request'對象獲取數據。 request.json不起作用。

請指教我,我做錯了什麼。 如何從「請求」對象獲取數據? 我是否需要將數據編碼到文件中? 如何將數據發送回客戶端?我需要將其編碼嗎? 我沒有找到一個完整的例子,使用angular和python/flask將文件上傳到服務器,保存並將其下載到客戶端。 非常感謝, 迪娜

+0

得到的文件名嘗試'request.file'或'request.files' – reptilicus

回答

0

命令「request.files的工作 的打動了我下面的對象 -

ImmutableMultiDict([('file', <FileStorage: 
u'12132638_10153196350425732_1151540092606190338_o.jpg' 
('image/jpeg')>)]) 

我不明白我怎麼可以把它保存在服務器上。 如何僅從此對象中獲取文件名稱 我該如何將其發送回客戶端?

非常感謝,迪娜

0

文件可以通過file = request.files['file'] 後, 可以讓你可以通過file.filename.encode("utf8")