2017-02-22 84 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)应该是不必要的。