2017-02-22 8 views
0

ファイルオブジェクトをPythonにajax呼び出しで送信する際に問題が発生しました。
Dropzone私の「ファイルアップローダーインターフェイス」と同じものを使用しています。特定のボタンを押したときに電話をかけています。 PythonでjavascriptからAjax経由でPythonにファイルを送信

私はファイルを処理しようとすると、それは言う " 'str' はオブジェクトが属性を持っていない '追求'"

私のJSコード:

... 
window.$form_add_file = $("#form_add_file"); 
var file = dropzone.files[0]; 
... 

var formData = $form_add_file.serializeArray(); 

if(file){ 

    $modal_add_file.find($drop_add_file).removeClass("error"); 

    var filetype = file.type.split("/")[0].toLowerCase(); 
    var hasFile = checkFileType(filetype); 
    if(!hasFile) { filetype = "file" } 

    formData.push(
     { name: "file", value: file }, 
     { name: "file_type", value: filetype }, 
     { name: "file_name", value: file.name }, 
     { name: "file_size", value: file.size } 
    ); 

} else { 
    error = true; 
    $modal_add_file.find($drop_add_file).addClass("error"); 
    return false; 
} 

if(!error){ 
    $.ajax({ 
     method: "POST", 
     url: host + "json.references.new", 
     data: formData, 
     cache: false, 
     dataType: 'json', 
     success: function(data){ 
      if(data){ 
       if(data.error){ 
        modalMessage($modal_add_file, data.error, "ok"); 
       } else { 
        refreshData(data); 
       } 
      } 
     }, 
     error: function(error){ 
      modalMessage($modal_add_file, oops_message, "ok"); 
     } 
    }); 
} 

私のPythonのコード:

try: 

    file_path = os.path.join(path, file_name) 
    temp_file_path = file_path + '~' 
    file.seek(0) # error happen here 
    with open(temp_file_path, 'wb') as output_file: 
     shutil.copyfileobj(file, output_file) 
    os.rename(temp_file_path, file_path) 

私はこれをインターネットで検索していますが、まだ何も見つかりませんでした。

残念ながら、英語は貧しい人々のために残念です。

ありがとうございます!

答えて

1

seekは、文字列ではなくファイルオブジェクトのメソッドです。

私はあなたのコードスニペットは、いくつかの行が欠落していると思いますが、fileは、ファイルことになっている場合は、あなたが最初のfile = open(file_path, 'rb')でファイルを開く必要がありますfile_pathで指されます。新しいファイルオブジェクトは0番目の位置から読み始めますので、file.seek(0)は不要です。

関連する問題