Javascript 将HTML5 dropbox转换为文件浏览
我非常不熟悉HTML5,jsp excel阅读器可以在这里找到: 据我所知,drop box需要HTML5,而我使用的浏览器不支持HTML5。(我的客户也没有。如果可以的话,我会告诉他们只需将浏览器更新到更现代的版本) 因此,我现在关心的是将文件放置框转换为文件浏览表单,例如:Javascript 将HTML5 dropbox转换为文件浏览,javascript,html,Javascript,Html,我非常不熟悉HTML5,jsp excel阅读器可以在这里找到: 据我所知,drop box需要HTML5,而我使用的浏览器不支持HTML5。(我的客户也没有。如果可以的话,我会告诉他们只需将浏览器更新到更现代的版本) 因此,我现在关心的是将文件放置框转换为文件浏览表单,例如: <form enctype="multipart/form-data" action="action" method="post"> <input type="hidden" name="M
<form enctype="multipart/form-data"
action="action" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
<table width="600">
<tr>
<td>Names file:</td>
<td><input type="file" name="file" /></td>
<td><input type="submit" value="Upload" /></td>
</tr>
</table>
</form>
文件名:
下面是包含HTML5框的index.html。有人能帮忙把盒子翻译成文件浏览器吗?让它做同样的事情
<!DOCTYPE html>
<style>
#drop{
border:2px dashed #bbb;
-moz-border-radius:5px;
-webkit-border-radius:5px;
border-radius:5px;
padding:25px;
text-align:center;
font:20pt bold,"Vollkorn";color:#bbb
}
#b64data{
width:100%;
}
</style>
<b>JS-XLS Live Demo</b><br />
<input type="radio" name="format" value="csv" checked> CSV<br>
<input type="radio" name="format" value="json"> JSON<br>
<input type="radio" name="format" value="form"> FORMULAE<br>
<div id="drop">Drop an XLS file here to see sheet data.</div>
<!--
<textarea id="b64data">... or paste a base64-encoding here</textarea>
<input type="button" id="dotext" value="Click here to process the base64 text" onclick="b64it();"/>
-->
<pre id="out"></pre>
<br />
<script src="xls.js"></script>
<script>
function get_radio_value( radioName ) {
var radios = document.getElementsByName( radioName );
for( var i = 0; i < radios.length; i++ ) {
if( radios[i].checked ) {
return radios[i].value;
}
}
}
function to_json(workbook) {
var result = {};
workbook.SheetNames.forEach(function(sheetName) {
var roa = XLS.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
if(roa.length > 0){
result[sheetName] = roa;
}
});
return result;
}
function to_csv(workbook) {
var result = [];
workbook.SheetNames.forEach(function(sheetName) {
var csv = XLS.utils.make_csv(workbook.Sheets[sheetName]);
if(csv.length > 0){
result.push("SHEET: " + sheetName);
result.push("");
result.push(csv);
}
});
return result.join("\n");
}
function to_formulae(workbook) {
var result = [];
workbook.SheetNames.forEach(function(sheetName) {
var formulae = XLS.utils.get_formulae(workbook.Sheets[sheetName]);
if(formulae.length > 0){
result.push("SHEET: " + sheetName);
result.push("");
result.push(formulae.join("\n"));
}
});
return result.join("\n");
}
var tarea = document.getElementById('b64data');
function b64it() {
var cfb = XLS.CFB.read(tarea.value, {type: 'base64'});
var wb = XLS.parse_xlscfb(cfb);
process_wb(wb);
}
function process_wb(wb) {
var output = "";
switch(get_radio_value("format")) {
case "json":
output = JSON.stringify(to_json(wb), 2, 2);
break;
case "form":
output = to_formulae(wb);
break;
default:
output = to_csv(wb);
}
if(out.innerText === undefined) out.textContent = output;
else out.innerText = output;
}
var drop = document.getElementById('drop');
function handleDrop(e) {
e.stopPropagation();
e.preventDefault();
var files = e.dataTransfer.files;
var i,f;
for (i = 0, f = files[i]; i != files.length; ++i) {
var reader = new FileReader();
var name = f.name;
reader.onload = function(e) {
var data = e.target.result;
var cfb = XLS.CFB.read(data, {type: 'binary'});
//var arr = String.fromCharCode.apply(null, new Uint8Array(data));
//var cfb = XLS.CFB.read(btoa(arr), {type: 'base64'});
var wb = XLS.parse_xlscfb(cfb);
process_wb(wb);
};
reader.readAsBinaryString(f);
//reader.readAsArrayBuffer(f);
}
}
function handleDragover(e) {
e.stopPropagation();
e.preventDefault();
e.dataTransfer.dropEffect = 'copy';
}
if(drop.addEventListener) {
drop.addEventListener('dragenter', handleDragover, false);
drop.addEventListener('dragover', handleDragover, false);
drop.addEventListener('drop', handleDrop, false);
}
</script>
#下降{
边框:2个虚线#bbb;
-moz边界半径:5px;
-webkit边界半径:5px;
边界半径:5px;
填充:25px;
文本对齐:居中;
字体:20磅粗体,“沃尔科恩”;颜色:#bbb
}
#B64数据{
宽度:100%;
}
JS-XLS现场演示
CSV
JSON
公式
在此处放置XLS文件以查看图纸数据。
函数get_radio_值(radioName){
var radios=document.getElementsByName(radioName);
对于(变量i=0;i0){
结果[sheetName]=roa;
}
});
返回结果;
}
函数到_csv(工作簿){
var结果=[];
工作簿.SheetNames.forEach(函数(sheetName){
var csv=XLS.utils.make_csv(workbook.Sheets[sheetName]);
如果(csv.length>0){
结果。推送(“工作表:+工作表名称”);
结果:推送(“”);
结果推送(csv);
}
});
返回结果。join(“\n”);
}
函数到_公式(工作簿){
var结果=[];
工作簿.SheetNames.forEach(函数(sheetName){
var formulas=XLS.utils.get_公式(workbook.Sheets[sheetName]);
如果(公式长度>0){
结果。推送(“工作表:+工作表名称”);
结果:推送(“”);
结果.push(公式.join(“\n”));
}
});
返回结果。join(“\n”);
}
var tarea=document.getElementById('b64data');
函数b64it(){
var cfb=XLS.cfb.read(tarea.value,{type:'base64'});
var wb=XLS.parsexlscfb(cfb);
过程wb(wb);
}
功能流程(wb){
var输出=”;
开关(获取无线电值(“格式”)){
案例“json”:
output=JSON.stringify(to_JSON(wb),2,2);
打破
案例“表格”:
输出=到_公式(wb);
打破
违约:
输出=输出至_csv(wb);
}
如果(out.innerText==未定义)out.textContent=输出;
else out.innerText=输出;
}
var drop=document.getElementById('drop');
函数handleDrop(e){
e、 停止传播();
e、 预防默认值();
var files=e.dataTransfer.files;
变量i,f;
对于(i=0,f=files[i];i!=files.length;++i){
var reader=new FileReader();
var name=f.name;
reader.onload=函数(e){
var数据=e.target.result;
var cfb=XLS.cfb.read(数据,{type:'binary'});
//var arr=String.fromCharCode.apply(null,新Uint8Array(数据));
//var cfb=XLS.cfb.read(btoa(arr),{type:'base64'});
var wb=XLS.parsexlscfb(cfb);
过程wb(wb);
};
reader.readAsBinaryString(f);
//reader.readAsArrayBuffer(f);
}
}
功能手柄(e){
e、 停止传播();
e、 预防默认值();
e、 dataTransfer.dropEffect='copy';
}
if(drop.addEventListener){
drop.addEventListener('dragenter',handleDragover,false);
drop.addEventListener('dragover',handleDragover,false);
drop.addEventListener('drop',handleDrop,false);
}
问题不在于拖放。问题是,如果浏览器对HTML5的支持不够好,它可能不支持文件API(给定代码中的FileReader对象和相关内容),因此它将根本无法读取本地文件,即使它们是用老式的文件浏览器选择的。老实说,除了将带有文件的操作移动到服务器端,我看不到简单的解决方案