2016-07-19 6 views
0

同じリクエストでファイルとそのファイル名をangleでアップロード(投稿)しようとしていて、それをFlaskで受け取り、ディスクに書き込もうとしています。AngularJSとFlaskの同じリクエストでバイナリファイルと名前を投稿する

reader.readAsArrayBuffer(importData.ruleFile.files[0]); 

httpリクエストは、次のとおりです:ファイルが使用してローカルディスクから読み出され

$http({ 
    url: baseUrlService.baseURL + 'importtifile', 
    method: 'POST', 
    headers: {'Content-Type': undefined}, 
    data: { 
     filename: importData.ruleFileName, 
//  filedata: new DataView(reader.result) 
//  filedata: reader.result 
     filedata: new Uint8Array(reader.result) 
    }, 

    transformRequest: function (data, headersGetter) { 
     var formData = new FormData(); 
     formData.append('filename', data.filename); 
     formData.append('filedata', data.filedata); 
     return formData; 
    } 

}).then(
... 

、フラスコの一部です:

@api.route('/importfile', methods=['POST']) 
def import_file(): 
    file_name = request.form['filename'] 
    file_data = request.form['filedata'] 

    f = NamedTemporaryFile(delete=False) 
    f.write(file_data) 
    f.close() 

問題は次のとおりです。

とき私は新しいDataView(reader.result)として角度からファイルを送信します。私は新しいUint8Array(reader.result)サーバは単なる文字列が含まれている書き込みファイルとして送信する場合

[オブジェクトのDataView]

:サーバーは1つの文字列が含まれて書き込みます:

[Uint8Arrayオブジェクト]

どのように私は実際ダを得ることができます転送されますか?

ファイルreadAsBinaryStringを読み込もうとしましたが、その場合、サーバー側に書き込まれたファイルは元の約2倍の大きさです。

ご協力いただきありがとうございます。

答えて

0

は最後に、私は私が転送する必要があるすべてはブロブです考え出し:

angularJS:1ファイルブロブと名の両方を抽出することができフラスコ部には

 // Send file as Blob along with its filename 
     $http({ 
      url: baseUrlService.baseURL + 'importtifile', 
      method: 'POST', 
      headers: {'Content-Type': undefined}, 
      data: { filedata: fileBlob }, 

      uploadEventHandlers: { 
       progress: function(e) { 
        importData.fileUploadProgress = e; 

        console.log(importData.fileUploadProgress); 
       } 
      }, 

      transformRequest: function (data, headersGetter) { 
       var formData = new FormData(); 
       formData.append('fileblob', data.filedata); 
       return formData; 
      } 

     }).then(
      ... 

@api.route('/importfile', methods=['POST']) 
def import_file(): 
    file_obj = request.files['fileblob'] 

およびfile_obj.filenameにファイル名が含まれます。

関連する問題