(对网络编程不熟悉,对任何缺乏基础知识表示歉意.)
我的页面允许用户选择一个文件然后在客户端读取并显示在页面的文本框中.我发现这样做的最简单方法是使用FileReader对象,它在Firefox和Chrome中运行良好.
这在Safari(尚未)中不起作用,那么我该怎么做呢?
//When the eventlistener detects a change in the input file...
var file = evt.target.files[0]
var reader = new FileReader();
reader.onload = function (e){document.getElementById('data').value = e.target.result};
reader.readAsText(file);
Run Code Online (Sandbox Code Playgroud)
相关说明:
我想在HTML5/JS中创建一个简单的游戏,我不希望用户运行任何网络服务器或必须连接到网站.(只是一个HTML页面)
但看起来FileReader只能用于文件类型输入.
是否可以只有两个文件:index.html和foo.txt并排读取index.html中的foo.txt,例如:
// No input needed, I know waht I want to read
var my_file = new File("foo.txt");
var reader = new FileReader();
alert( reader.readAstext( my_file, "UTF-8" ) );
Run Code Online (Sandbox Code Playgroud)
任何的想法 ?
我在for循环中调用了FileReader API来遍历多个文件对象.我正在使用FileReader来显示图像的预览.
function() {
for (var i in Files) {
var fileReader = new FileReader();
fileReader.readAsBinaryString(Files[i]);
fileReader.onload = function() {
// do something on FileReader onload
}
fileReader.onprogress = function(data) {
if (data.lengthComputable) {
var progress = parseInt( ((data.loaded / data.total) * 100), 10 );
console.log(progress);
}
}
}
// do something on completion of FileReader process
// actions here run before completion of FileReader
}
Run Code Online (Sandbox Code Playgroud)
由于FileReader API的异步特性,我遇到了两个问题.首先,onprogress为每个FileReader实例触发事件.这为我提供了每个文件的进度.然而,我打算显示所有文件的总进度而不是单个文件.
其次,我想执行只应在FileReader的所有实例(每个文件一个)完成时执行的操作.目前,由于FileReader是异步运行的,因此操作在FileReader完成任务之前运行.我已经搜索了很多,但却遇到了解决这些问题的方法.任何帮助表示赞赏.
我正在使用cordova文件插件 - cordova文件插件
我实际上是从文本文件中读取文件.以下是我的代码
document.addEventListener("deviceready", function () {
window.resolveLocalFileSystemURL(cordova.file.applicationDirectory + "sameple.txt", gotFile, fail);
}, true);
function gotFile(file) {
file.file(function (file) {
var reader = new FileReader();
reader.onloadend = function (evt) {
console.log(this.result);
}
reader.readAsText(file);
}, fail());
}
function fail(e) {
console.info("FileSystem Error : " + e);
}
Run Code Online (Sandbox Code Playgroud)
因此每当我运行此代码时,我都会收到以下错误
deviceready has not fired after 5 seconds.
Channel not fired: onPluginsReady
Channel not fired: onCordovaReady
Could not get Cordova FileSystem: Error: deviceready has not fired after 5 seconds.
"Could not get Cordova …Run Code Online (Sandbox Code Playgroud) 我正在创建一个Web扩展并从XUL移植.我曾经能够轻松阅读文件
var dJsm = Components.utils.import("resource://gre/modules/Downloads.jsm").Downloads;
var tJsm = Components.utils.import("resource://gre/modules/Task.jsm").Task;
var fuJsm = Components.utils.import("resource://gre/modules/FileUtils.jsm").FileUtils;
var nsiPromptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
....
NetUtil.asyncFetch(file, function(inputStream, status) {
if (!Components.isSuccessCode(status)) {
return;
}
var data = NetUtil.readInputStreamToString(inputStream, inputStream.available());
var data = window.btoa(data);
var encoded_data_to_send_via_xmlhttp = encodeURIComponent(data);
...
});
Run Code Online (Sandbox Code Playgroud)
以上内容将被弃用.
我可以使用downloads.download()来了解最后一次下载是什么,但我无法读取该文件,然后获取encode_data_to_send_via_xmlhttp的等效文件
此外,在Firefox 57以上,意味着我必须尝试通过按钮单击或其他东西伪造用户操作,或上传文件.
Access to file:// URLs or reading files without any explicit user input
Run Code Online (Sandbox Code Playgroud)
是不是有一个简单的方法来阅读上次下载的文件?
我刚刚发现FileReader调度事件就像它是一个DOM元素一样.是吗?我想知道是否有可能创建一个类似于FileReader的对象,它没有HTML/XML结构中的表示,但可以调度事件?
该文件在这里
http://dl.dropbox.com/u/12337149/history.csv
我尝试按如下方式读取数据
for (line <- Source.fromFile(new File(file)).getLines) {
println(line)
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Exception in thread "main" java.nio.charset.MalformedInputException: Input length = 1
at java.nio.charset.CoderResult.throwException(CoderResult.java:260)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:319)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at scala.io.BufferedSource$BufferedLineIterator.<init>(BufferedSource.scala:32)
at scala.io.BufferedSource.getLines(BufferedSource.scala:43)
at com.alluvia.reports.RunIGConverter$$anonfun$main$1.apply(RunIGConverter.scala:17)
at com.alluvia.reports.RunIGConverter$$anonfun$main$1.apply(RunIGConverter.scala:15)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:34)
at scala.collection.mutable.ArrayOps.foreach(ArrayOps.scala:38)
at com.alluvia.reports.RunIGConverter$.main(RunIGConverter.scala:15)
at com.alluvia.reports.RunIGConverter.main(RunIGConverter.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Run Code Online (Sandbox Code Playgroud)
该文件在excel中打开就好了.我认为这是某种类型的编码问题,但我不知道解决方法
IE10中似乎不支持readAsBinaryString,这是JavaScript FileReader对象的一种方法.我按照这篇HTML5 Rocks文章的建议尝试了以下内容:
String.fromCharCode.apply(null, new Uint16Array(buffer));
Run Code Online (Sandbox Code Playgroud)
但是,这会导致Out of stack space错误.
我有一个文件输入,它返回给我的文件路径,但 fileReader 给了我以下错误。
Uncaught TypeError: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'.
Run Code Online (Sandbox Code Playgroud)
我觉得我在这里错过了一些东西。我哪里错了?
import React from 'react';
export default class TestPage extends React.Component {
constructor() {
super();
this.state = {
file: ''
}
}
onChange(e) {
let reader = new FileReader();
reader.onload = function(e) {
this.setState({file: reader.result})
}
reader.readAsDataURL(e.target.value);
}
render() {
return (
<div>
<input onChange={this.onChange.bind(this)} type="file" name="file" />
<br />
<video width="400" controls>
<source src={this.state.file} type="video/mp4" />
</video>
</div>
)
}
}
Run Code Online (Sandbox Code Playgroud) 我在 Vue.js 项目中使用 FileReader,并且此代码有问题:
async uploadDocuments(files) {
for (let file of files) {
let fileName = file.name;
let fileContent;
let reader = new FileReader();
reader.onload = async () => {
fileContent = reader.result;
await this.submitFile(fileContent, fileName, fileType)
.then(/* THEN block */)
.catch(/* CATCH block */);
};
reader.onerror = (error) => { console.warn(error); };
reader.readAsDataURL(file);
}
console.log("COMPLETED");
}
async submitFile(fileContent, fileName, fileType) {
// this function should handle the file upload and currently contains a timeout
await new Promise((resolve) => setTimeout(resolve, …Run Code Online (Sandbox Code Playgroud)