相关疑难解决方法(0)

读取大文本文件的n行

我拥有的最小文件有> 850k行,每行的长度未知.目标是n在浏览器中读取此文件中的行.完全阅读它不会发生.

这是<input type="file" name="file" id="file">我和我的HTML 和JS:

var n = 10;
var reader = new FileReader();
reader.onload = function(progressEvent) {
  // Entire file
  console.log(this.result);

  // By lines
  var lines = this.result.split('\n');
  for (var line = 0; line < n; line++) {
    console.log(lines[line]);
  }
};
Run Code Online (Sandbox Code Playgroud)

显然,这里的问题是它试图首先实现整个文件,然后用换行符拆分它.所以无论如何n,它都会尝试读取整个文件,并在文件很大时最终不读取任何内容.

我该怎么办?

注意:我愿意删除整个函数并从头开始,因为我将能够console.log()读到我们读过的每一行.


*"每行都是未知长度" - >表示文件是这样的:

(0, (1, 2))
(1, (4, 5, 6))
(2, (7))
(3, (8))
Run Code Online (Sandbox Code Playgroud)

编辑:

要走的路就像大文件上的filereader api,但我看不出如何修改它来读取n文件的行...

通过使用Uint8Array在Javascript中字符串 …

html javascript io file bigdata

9
推荐指数
2
解决办法
3770
查看次数

Angular - 将文件上传为base64

我正在尝试将文件从Angular 4应用程序上传到JSON API服务,该服务接受base64字符串作为文件内容.

所以我所做的是 - 用文件读取FileReader.readAsDataURL,然后当用户确认上传时,我将向API创建一个JSON请求并发送base64我之前获得的文件的字符串.

这就是问题开始的地方 - 只要我对"内容"(记录,发送,w/e)执行某些操作,请求将被发送,但其速度非常慢,例如20MB的2MB文件.

我试过了:

  • 使用ArrayBuffer并手动将其转换为base64
  • 将base64字符串存储在HTML中并稍后检索
  • 用户点击上传按钮后读取文件
  • 使用旧客户端 @angular/common
  • 使用普通的XHR请求

但是一切都会导致相同的结果.

我知道问题所在.但为什么会这样呢?是浏览器特定的还是角度特定的?是否有更优选的方法(请记住它必须是base64字符串)?


笔记:

  • 更改API中的任何内容都超出了我的控制范围
  • API很好,通过postman发送任何文件将立即完成

码:

当用户将文件添加到dropzone时,此方法将运行:

public onFileChange(files: File[]) : void {
    files.forEach((file: File, index: number) => {
        const reader = new FileReader;

        // UploadedFile is just a simple model that contains filename, size, type and later base64 content
        this.uploadedFiles[index] = new UploadedFile(file);

        //region reader.onprogress
        reader.onprogress = (event: ProgressEvent) => {
            if (event.lengthComputable) …
Run Code Online (Sandbox Code Playgroud)

rest base64 json file-upload angular

8
推荐指数
1
解决办法
3161
查看次数

具有流式传输的JS文件上传器,即无需将整个文件加载到内存中

类似于在这个MDN页面上描述的那个,但没有将文件加载到内存中,即我希望能够使用一些流接口以块的形式发送文件,以便我的客户端进程独立于文件大小.使用不可见<input type=file>元素选择文件.

这是一个现实世界的问题:我的用户将一次上传多个文件,这可能足够大(并且客户端设备足够有限)担心内存消耗.与此同时,我想提供一个很好的客户端上传器,其中包含进度指示.

FileReader接口似乎不支持流式传输,除非我当然缺少一些东西.

该解决方案应该可以在最新版本的Safari,Chrome和Firefox中使用,如果可能的话也可以在IE9中使用(尽管可能没什么希望).编辑:也没有jQuery,只是简单的JavaScript.

javascript file-upload filereader

6
推荐指数
1
解决办法
3062
查看次数

逐行读取FileReader对象,而不将整个文件加载到RAM中

现在许多浏览器都支持使用HTML5的FileReader读取本地文件,这为超出"数据库前端"的网站打开了大门,这些脚本可以对本地数据执行一些有用的操作,而无需先将其发送到服务器.

在上传前预处理图像和视频,FileReader的一个大应用是将数据从某种磁盘表(CSV,TSV等)加载到浏览器中进行操作 - 可能用于D3.js中的绘图或分析或在WebGL中创建景观.

问题是,StackOverflow和其他站点上的大多数示例都使用FileReader的.readAsText()属性,该属性在返回结果之前将整个文件读入RAM.

javascript:如何逐行解析FileReader对象

要在不将数据加载到RAM的情况下读取文件,需要使用.readAsArrayBuffer(),这个SO帖子是最接近我能得到一个好答案的:

大文件上的filereader api

然而,这个特定问题有点过于具体,而且说实话,我可以尝试好几天让解决方案更加通用,然后空手而归,因为我不明白块大小的重要性或为什么Uint8Array是用过的.使用用户可定义的行分隔符逐行读取文件的更一般问题的解决方案(理想情况下使用.split(),因为它也接受正则表达式),然后按行执行某些操作(例如将其打印到console.log)是理想的.

javascript html5 filereader

1
推荐指数
1
解决办法
1462
查看次数

使用javascript计算大文件的MD5哈希值

如何上传500mb文件并使用CryptoJS获取MD5哈希?

这是我的代码:

$('#upload-file').change(function(){
    var reader = new FileReader();
    reader.addEventListener('load',function () {
        var hash = CryptoJS.MD5(CryptoJS.enc.Latin1.parse(this.result));
        window.md5 = hash.toString(CryptoJS.enc.Hex);
    });

    reader.readAsBinaryString(this.files[0]);
});
Run Code Online (Sandbox Code Playgroud)

如果文件低于200mb,它可以工作.任何更大的东西,this.result都是空的"".

我试过了:

大文件上的filereader api

javascript FileReader - 以块的形式解析长文件

几乎让这个工作,但控制台抱怨.join("")

http://dojo4.com/blog/processing-huge-files-with-an-html5-file-input

javascript md5 filereader cryptojs

1
推荐指数
1
解决办法
2972
查看次数

标签 统计

javascript ×4

filereader ×3

file-upload ×2

angular ×1

base64 ×1

bigdata ×1

cryptojs ×1

file ×1

html ×1

html5 ×1

io ×1

json ×1

md5 ×1

rest ×1