2015-07-01 34 views
1

我正在創建一個Web端口,最終用戶將上傳一個CSV文件,我將在服務器端(python)對該文件進行一些操作。服務器端存在一些延遲和延遲,所以我不想從服務器向客戶端發送有關上傳文件格式不正確的消息。有沒有辦法在客戶端做繁重的工作,可能是使用js或jquery來檢查上傳的文件是否「逗號分隔」等等?檢查客戶端上傳的文件格式

我知道我們可以在html中執行「accept = .csv」,以便文件擴展名具有csv格式,但如何處理內容以確保。

+0

這應該是一個很好的起點.. http://stackoverflow.com/questions/2513642/javascript-csv-validation – user2879041

+0

只是解析在JS中,看看它是否有相同的#列的2+行 – dandavis

+0

安全提示:永遠不要信任來自客戶端的數據。一定要確認文件的內容是服務器端的文本。 –

回答

0

只有通過使用File API(https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications)才能訪問來自Javascript的本地文件 - 通過使用此功能,您可以檢查內容是否符合您的期望。

+0

'URL.createObjectURL(file)'是另一種方式,雖然'FileReader'對於這個特定的任務可能更好。只是說File API不是獲取或使用本地文件數據的唯一方法。 – dandavis

0

下面是我選擇文件時用來顯示預覽圖像clientside的一些代碼。你應該能夠以此爲起點來對文件數據做其他事情。確定它的csv是否取決於你。

明顯警告:
你還必須檢查服務器端。任何人都可以修改你的客戶端javascript來假裝壞文件是好的。

另一個警告: 我敢肯定你可以在有效的csv文件中轉義逗號字符。我認爲轉義字符可能會碰到一些實施差別太大......

// Fired when the user chooses a file in the OS dialog box 
// They will have clicked <input id="fileId" type="file"> 
document.getElementById('fileId').onchange = function (evt) { 
    if(!evt.target.files || evt.target.files.length === 0){ 
    console.log('No files selected'); 
    return; 
    } 
    var uploadTitle = evt2.target.files[0].name; 
    var uploadSize = evt2.target.files[0].size; 
    var uploadType = evt2.target.files[0].type; 

    // To manipulate the file you set a callback for the whole contents: 
    var FR = new FileReader(); 
    // I've only used this readAsDataURL which will encode the file like data:image/gif;base64,R0lGODl... 
    // I'm sure there's a similar call for plaintext 
    FR.readAsDataURL($('#file')[0].files[0]); 
    FR.onload = function(evt2){ 
    var evtData = { 
     filesEvent: evt, 
    } 
    var uploadData = evt2.result 
    console.log(uploadTitle, uploadSize, uploadType, uploadData); 
    } 
} 
+0

感謝大家,在服務器端做到這一點是有道理的。我將使用此代碼在客戶端進行某種檢查。 – user3089927