2012-08-01 78 views
1

我的應用程序有一個python(bottle.py)後端和一個html/jquery前端。 我得到一個文本文件,在表單中使用'input'並在後臺上傳它,在python端使用事件處理函數。事件處理程序然後解析該文件(重複調用file.readline())並返回一些json形式的結果。解析Python中的jQuery formdata

一切順利,直到我需要解析python文件。

這裏是我的javascript:

function UploadFile() { 
    var file = $('#data')[0].files[0]; 
    var formData = new FormData(); 
    formData.append("file", file); 
    $.ajax({ 
     url: 'plates', 
     type: 'POST', 
     data: formData, 
     cache: false, 
     contentType: false, 
     processData: false, 
     success: function(data){ 
      ... 
     } 
    }); 
} 

當我收到蟒側POST請求,我只能用request.body.read().decode()閱讀。如果我想request.files.data.file.read(),我得到了「斷管」的錯誤:

socket.error: [Errno 32] Broken pipe 

我剛剛得到的文本與request.body.read().decode(),將它們保存到文件,然後加載並解析。但我想避免創建不需要創建的文件,並且想要在內存中執行所有操作。

爲什麼request.body.read().decode()工作和request.files.data.file.read()不? 有沒有辦法用我現有的功能解析文件,而不寫入磁盤?

回答

1

我建議確保您的要求與內容類型「的multipart/form-data的」提交。缺省值是「application/x-www-form-urlencoded」,這可能不是試圖解析文件時瓶子期望的值。

RFC 2388是一個很好的信息(儘管厚)來源,如果你想了解更多關於HTTP處理多形式(包括文件)

而且,這裏有一個good discussion about file upload with jQuery

0

我完全不知道爲什麼這兩個調用是不同的(我使用的是django),但是在不寫入磁盤的情況下解析它的方式是通過獲取一個新的BytesIO實例,寫入並使用它來代替文件句柄。只是部分解決方案。

如果它僅僅是文字,可以考慮使用StringIO的替代