我正在創建一個Web端口,最終用戶將上傳一個CSV文件,我將在服務器端(python)對該文件進行一些操作。服務器端存在一些延遲和延遲,所以我不想從服務器向客戶端發送有關上傳文件格式不正確的消息。有沒有辦法在客戶端做繁重的工作,可能是使用js或jquery來檢查上傳的文件是否「逗號分隔」等等?檢查客戶端上傳的文件格式
我知道我們可以在html中執行「accept = .csv」,以便文件擴展名具有csv格式,但如何處理內容以確保。
我正在創建一個Web端口,最終用戶將上傳一個CSV文件,我將在服務器端(python)對該文件進行一些操作。服務器端存在一些延遲和延遲,所以我不想從服務器向客戶端發送有關上傳文件格式不正確的消息。有沒有辦法在客戶端做繁重的工作,可能是使用js或jquery來檢查上傳的文件是否「逗號分隔」等等?檢查客戶端上傳的文件格式
我知道我們可以在html中執行「accept = .csv」,以便文件擴展名具有csv格式,但如何處理內容以確保。
只有通過使用File API(https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications)才能訪問來自Javascript的本地文件 - 通過使用此功能,您可以檢查內容是否符合您的期望。
'URL.createObjectURL(file)'是另一種方式,雖然'FileReader'對於這個特定的任務可能更好。只是說File API不是獲取或使用本地文件數據的唯一方法。 – dandavis
下面是我選擇文件時用來顯示預覽圖像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);
}
}
感謝大家,在服務器端做到這一點是有道理的。我將使用此代碼在客戶端進行某種檢查。 – user3089927
這應該是一個很好的起點.. http://stackoverflow.com/questions/2513642/javascript-csv-validation – user2879041
只是解析在JS中,看看它是否有相同的#列的2+行 – dandavis
安全提示:永遠不要信任來自客戶端的數據。一定要確認文件的內容是服務器端的文本。 –