我正在创建一个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
安全提示:永远不要信任来自客户端的数据。一定要确认文件的内容是服务器端的文本。 –