2015-07-01 31 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