通常只做FileReader.read...
并弹出错误就是(async。)方式。
但在某些情况下,只需在启动实际传输之前同步检查访问权限可能会更好(参见下面的示例)。
如果没有实际读取整个文件,它能否返回?
function is_readable(file) { // File object
var ok = null
function check(e) {
ok = (SOME.ERROR.CONDITION.HERE ? false : true) // perhaps: e.target.result?
}
var blob = file.slice(0, 1) // does slice() make any sense here?
var reader = new FileReader()
// not sure which events to buy:
reader.onload = check
reader.onerror = check
reader.readAsArrayBuffer(blob)
// sync here for the result:
while (ok === null) {
alert('...waiting...')
}
return ok
}
示例案例:
对于批量上传(选择具有多文件INPUT
的文件,并且在按下“全部上传”按钮之前不发送它们),您希望以红色列出不可读的文件。为此,在列表构建器循环中,您只需为每个File
对象f
选择颜色,例如is_readable(f) ? 'green' : 'red'
。
由于某种原因,Chrome(25)似乎在XMLHttpRequest.send()
期间没有设置错误,很高兴发布文件,但默默地将截断为0字节,如果文件不可读。所以我想事先检查一下,作为一种解决方法。
(注意:我检查了php.js,但似乎没有这个。)