我已经搜索过网络,并且通过许多不同的方式自己解决这个问题,但没有成功。
如果文件扩展名被接受,我想显示一条消息,与“outpush.push”语句的方式相同。
这需要从接受的文件扩展名(如JPG,PNG,GIF)的ARRAY中获取,并检测文件扩展名是否为大写并接受它(将其转换为小写)。
这是我的脚本。我想知道脚本中我可以如何以及在何处实现这样的功能?
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
var max_size = 5120; // Max file size
var output = [];
for (var i = 0, f; f = files[i]; i++) {
output.push('<li><strong><font size="3" color="FFFFFF">FILE: ', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
f.size, ' bytes, last modified: ',
f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
'</font></li>');
if(f.size > max_size) {
output.push('<font size="5" color="FFFF00"><b>ERROR!! Sorry, but the file that you selected is too large. Please upload a file that is no larger than ' + max_size + ' KB.');
}
if(f.size < max_size) {
output.push('<font size="5" color="FFFF00"><b>FILE SIZE OK. CLICK TO SEND button below.</font>');
output.push('<font size="5" color="FFFFFF"><hr><b>IMPORTANT: Do not close this window. Wait till you see the next page when finished uploading your file.</font>');
document.getElementById("myButton").style.display="all";
}
}
document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
答案 0 :(得分:7)
您的代码存在一些问题。
1)您应该使用if-else
,而不是多个if
语句:
if (f.size > max_size) {
// ...
} else {
// ...
}
2)all
不是display
的有效值,使用block
或inline
:
document.getElementById("myButton").style.display = "block";
3)您使用的是过时的<font>
代码。相反,使用样式和CSS。在您的情况下,我会使用类,一个用于msg
,另外还有error
,important
和ok
的其他类。
4)要进行数组检查,只需使用indexOf()
:
var extensions = ["jpg", "jpeg", "txt", "png"]; // Globally defined
...
// Get extension and make it lowercase
// This uses a regex replace to remove everything up to
// and including the last dot
var extension = f.name.replace(/.*\./, '').toLowerCase();
if (extensions.indexOf(extension) < 0) { // Wasn't found
output.push('<li class="msg error">ERROR!! Sorry, but the file that you selected is not a valid file type. Valid types are: ', valid, '</li>');
} else ...
答案 1 :(得分:2)
您可以将数组设置为:
var file_types = {'jpg', 'png', 'gif'};
然后在for-loop中执行类似的操作
if ($.inArray(f.ext, file_types) == -1) {
output.push('<font size="5" color="FFFF00"><b>ERROR!! Incorrect file type! Accepted file types are : jpg, png, gif</b></font>');
}
更多关于inArray()的内容。
答案 2 :(得分:0)
您可以尝试以下两种方法之一 - 尝试获取扩展名并将其与允许的扩展数组或正则表达式进行匹配。
var accepted_types = ['jpg', 'gif', 'png'];
if (accepted_types.indexOf(f.ext) > 0) {
output.push(...);
}
至于jQuery - 您可能会考虑以下内容来构建HTML
var file_list = $("<ul></ul>");
for (var i = 0, f; f = files[i]; i++) {
// work goes here, simply append the list elements into file_list
file_list.append($("<li>" ... "</li>"));
}
// to append your new list to id="list"
$("#list").append(file_list);
// or to replace the html with your new html
$("#list").html(file_list.html());