2017-02-22 38 views
0

我在通過ajax調用向python發送文件對象時遇到問題。
我正在使用Dropzone就像我的「文件上傳器接口」,並且當某個按鈕被按下時我正在發送一個呼叫。通過Ajax將文件從javascript發送到Python

在蟒蛇當我嘗試處理文件,它說:「 '海峽' 對象有沒有屬性 '求'」

我的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_path指向的文件,那麼你應該首先用file = open(file_path, 'rb')打開文件。新的文件對象應該從第0位開始讀取,因此file.seek(0)應該是不必要的。