通常只是做FileReader.read...
错误并弹射错误将是(异步)方式。
但在某些情况下,在启动实际传输之前简单地同步检查访问可能会更好(参见下面的示例)。
- 可以是这样的吗(在伪代码中;基于此 SO 帖子)?
它可以在不实际读取整个文件的情况下返回 true 吗?
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'
.XMLHttpRequest.send()
由于某种原因,Chrome(25) 似乎没有在这里设置错误,愉快地发布文件,但如果文件不可读,则会默默地截断为 0 字节。所以我想事先自己检查一下,作为一种解决方法。
(注意:我检查了php.js但似乎没有这个。)