JS处理文件


JS处理文件

相关类 FileList、File、FileReader、Blob、FileError、ProgressEvent、ArrayBuffer、FormData


Blob

Blob 对象表示一个不可变、原始数据的类文件对象。Blob 表示的不一定是JavaScript原生格式的数据。File 接口基于Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。
要从其他非blob对象和数据构造一个Blob,请使用 Blob() 构造函数。要创建包含另一个blob数据的子集blob,请使用 slice()方法。要获取用户文件系统上的文件对应的Blob对象,请参阅 File文档。
接受Blob对象的API也被列在 File 文档中。

  • 构造函数

Blob(array, options );
返回一个新创建的 Blob 对象,其内容由参数中给定的数组串联组成。
参数:

  • array是一个由ArrayBuffer, ArrayBufferView, Blob, DOMString 等对象构成的 Array ,或者其他类似对象的混合体,它将会被放进 Blob。DOMStrings会被编码为UTF-8。
  • options 是一个可选的BlobPropertyBag字典,它可能会指定如下两个属性:
    type,默认值为 “”,它代表了将会被放入到blob中的数组内容的MIME类型。
    endings,默认值为"transparent",用于指定包含行结束符\n的字符串如何被写入。 它是以下两个值中的一个: “native”,代表行结束符会被更改为适合宿主操作系统文件系统的换行符,或者 “transparent”,代表会保持blob中保存的结束符不变
var aFileParts = ['<a id="a"><b id="b">hey!</b></a>']; // 一个包含DOMString的数组
var oMyBlob = new Blob(aFileParts, {type : 'text/html'}); // 得到 blob
  • 属性

Blob.size 只读
Blob 对象中所包含数据的大小(字节)。

Blob.type 只读
一个字符串

  • 方法

Blob.slice([start,[ end ,[contentType]]])[webkitSlice,webkitSlice]
返回一个新的 Blob对象,包含了源 Blob对象中指定范围内的数据。
参数:

  • start 可选
    这个参数代表 Blob 里的下标,表示第一个会被会被拷贝进新的 Blob 的字节的起始位置。如果你传入的是一个负数,那么这个偏移量将会从数据的末尾从后到前开始计算。举例来说, -10 将会是 Blob 的倒数第十个字节。它的默认值是0, 如果你传入的start的长度大于源 Blob 的长度,那么返回的将会是一个长度为0并且不包含任何数据的一个 Blob 对象。
  • end 可选
    这个参数代表的是 Blob 的一个下标,这个下标-1的对应的字节将会是被拷贝进新的Blob 的最后一个字节。如果你传入了一个负数,那么这个偏移量将会从数据的末尾从后到前开始计算。举例来说, -10 将会是 Blob 的倒数第十个字节。它的默认值就是它的原始长度(size).
  • contentType 可选
    给新的 Blob 赋予一个新的文档类型。这将会把它的 type 属性设为被传入的值。它的默认值是一个空的字符串。

File

文件(File)接口提供有关文件的信息,并允许网页中的 JavaScript 访问其内容。
通常情况下, File 对象是来自用户在一个 <input> 元素上选择文件后返回的 FileList 对象,也可以是来自由拖放操作生成的 DataTransfer 对象,或者来自 HTMLCanvasElement 上的 mozGetAsFile() API。在Gecko中,特权代码可以创建代表任何本地文件的File对象,而无需用户交互(有关详细信息,请参阅注意事项。
File 对象是特殊类型的 Blob,且可以用在任意的 Blob 类型的 context 中。比如说, FileReader, URL.createObjectURL(), createImageBitmap(), 及 XMLHttpRequest.send() 都能处理 Blob 和 File。

  • 属性

File.lastModified 只读
返回当前 File 对象所引用文件最后修改时间,自 UNIX 时间起始值(1970年1月1日 00:00:00 UTC)以来的毫秒数。

File.lastModifiedDate 只读
返回当前 File 对象所引用文件最后修改时间的 Date 对象。

File.name 只读
返回当前 File 对象所引用文件的名字。

File.size 只读
返回文件的大小。

File.webkitRelativePath 只读
返回 File 相关的 path 或 URL。

File.type 只读
返回文件的 多用途互联网邮件扩展类型(MIME Type)

  • 方法

Blob.slice([start[, end[, contentType]]])
返回一个新的 Blob 对象,它包含有源 Blob 对象中指定范围内的数据。


FileReader

FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。

  • 属性

FileReader.error 只读
一个DOMException,表示在读取文件时发生的错误 。

FileReader.readyState 只读
表示FileReader状态的数字。取值如下:

常量名描述
EMPTY0还没有加载任何数据.
LOADING1数据正在被加载.
DONE2已完成全部的读取请求

FileReader.result 只读
文件的内容。该属性仅在读取操作完成后才有效,数据的格式取决于使用哪个方法来启动读取操作。

  • 方法

FileReader.abort()
中止读取操作。在返回时,readyState属性为DONE。

FileReader.readAsArrayBuffer()
开始读取指定的 Blob中的内容, 一旦完成, result 属性中保存的将是被读取文件的 ArrayBuffer 数据对象.

FileReader.readAsBinaryString()
开始读取指定的Blob中的内容。一旦完成,result属性中将包含所读取文件的原始二进制数据。

FileReader.readAsDataURL()
开始读取指定的Blob中的内容。一旦完成,result属性中将包含一个data: URL格式的字符串以表示所读取文件的内容。

FileReader.readAsText()
开始读取指定的Blob中的内容。一旦完成,result属性中将包含一个字符串以表示所读取的文件内容。

  • 事件处理

FileReader.onabort
处理abort事件。该事件在读取操作被中断时触发。

FileReader.onerror
处理error事件。该事件在读取操作发生错误时触发。

FileReader.onload
处理load事件。该事件在读取操作完成时触发。

FileReader.onloadstart
处理loadstart事件。该事件在读取操作开始时触发。

FileReader.onloadend
处理loadend事件。该事件在读取操作结束时(要么成功,要么失败)触发。

FileReader.onprogress
处理progress事件。该事件在读取Blob时触发。


ProgressEvent

这个 ProgressEvent 接口用来表示测量底层操作一个HTTP请求的进度(例如:一个 XMLHttpRequest、一个底层资源像 <img>, <audio>, <video>, <style> or <link>).
同时继承它的父元素 Event 的属性以及方法。

  • 属性

ProgressEvent.lengthComputable 只读
它是一个布尔值标识,表明总共需要完成的工作量和已经完成的工作是否可以被底层所计算到。换而言之,它表示的就是过程是否是可以测量的。

ProgressEvent.loaded 只读
是一个unsigned long long类型,表示底层进程已经执行的工作量。所做的工作比率可以用属性和ProgressEvent.total计算。当使用HTTP下载资源时,这只表示内容本身的一部分,而不是头和其他开销。

ProgressEvent.total 只读
是unsigned long long类型,表示底层进程正在执行的工作总量。当使用HTTP下载资源时,这只表示内容本身,而不是头和其他开销

  • 示列

下面的例子向一个新的 XMLHTTPRequest 请求添加了一个 ProgressEvent,并且用它来显示这个请求的状态。

var progressBar = document.getElementById("p"),
      client = new XMLHttpRequest()
  client.open("GET", "magical-unicorns")
  client.onprogress = function(pe) {
    if(pe.lengthComputable) {
      progressBar.max = pe.total
      progressBar.value = pe.loaded
    }
  }
  client.onloadend = function(pe) {
    progressBar.value = pe.loaded
  }
  client.send()

FileError

用来表示在使用FileReader接口时发生的错误.

  • 属性
属性名类型描述
codeunsigned shortThe error code.

Error codes

常量描述
ABORT_ERR3文件的操作命令被取消,可能是由于调用了FileReader的abort()方法.
ENCODING_ERR5文件数据不能准确的被表示为一个data URI.
NOT_FOUND_ERR1找不到文件.
NOT_READABLE_ERR4文件无法被读取.
SECURITY_ERR2由于安全原因,文件不能被访问.

FormData

FormData 接口提供了一种表示表单数据的键值对的构造方式,经过它的数据可以使用 XMLHttpRequest.send() 方法送出,本接口和此方法都相当简单直接。如果送出时的编码类型被设为 “multipart/form-data”,它会使用和表单一样的格式。

  • 方法

FormData.append(name, value, filename)
将新值附加到FormData对象内的现有键上,或者添加该键(如果该键尚不存在)。

FormData.delete(name)
从FormData对象中删除键/值对。

FormData.entries()
返回iterator允许遍历此对象中包含的所有键/值对。

FormData.get(name)
返回与FormData对象内的给定键关联的第一个值。

FormData.getAll(name)
返回与a中给定键关联的所有值的数组FormData。

FormData.has(name)
返回一个布尔值,指出FormData对象是否包含某个键。

FormData.keys()
返回iterator允许遍历此对象中包含的键/值对的所有键。

FormData.set(name, value, filename)
为FormData对象内的现有键设置新值,或者添加键/值(如果尚不存在)。

FormData.values()
返回iterator允许遍历此对象中包含的所有值。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>AngularJS</title>
</head>
<body>

    <input type="file" id="files" multiple>

</body>
<script>
    // ArrayBuffer
    //

    // 方法一input
    var files = document.getElementById("files");
    files.addEventListener("change", function (ev) {
        var fs = ev.target.files; // 获取input中载入的文件FileList|var fs = files.files;
        var file = fs[0];   // 获取第一个文件File

        console.log('fileType:', file.type);

        var fileReader = new FileReader();
        fileReader.readAsArrayBuffer(file);

        fileReader.onload = function(e){
            console.log("e:", e);// e == ProgressEvent

            console.log("data:", fileReader.result);

            // 下载导入的文件
            var a = document.createElement('a');
            a.download = 'tet.txt';
            a.href = fileReader.result;
            document.body.appendChild(a);
            a.click();
            document.body.removeChild(a);
        };
    });


    // 方法二拖动到指定元素,这里设置为document
    function handleFileSelect(evt) {
        evt.stopPropagation();
        evt.preventDefault();

        var files = evt.dataTransfer.files;
        console.log("fs:", files[0]);
    }

    function handleDragOver(evt) {
        evt.stopPropagation();
        evt.preventDefault();
        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.
    }

    // Setup the dnd listeners.
    document.addEventListener('dragover', handleDragOver, false);
    document.addEventListener('drop', handleFileSelect, false);


</script>

</html>

在PHP中,可以通过处理JavaScript上传的文件。以下是一个简单的实例,展示了如何使用PHP处理通过JavaScript上传的文件。 首先,需要在HTML中创建一个上传文件的表单。可以使用input[type=file]元素来实现文件上传功能。 ```html <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传"> </form> ``` 然后,在PHP的upload.php文件中,可以使用$_FILES全局变量来处理上传的文件。这个变量包含了上传文件的各种信息,比如文件名、文件类型、临时文件路径等。 ```php <?php if(isset($_FILES['file'])){ $file = $_FILES['file']; // 获取文件名 $filename = $file['name']; // 获取文件类型 $filetype = $file['type']; // 获取文件大小 $filesize = $file['size']; // 获取文件临时路径 $tempFilePath = $file['tmp_name']; // 将文件移动到服务器指定位置 $targetFilePath = 'uploads/' . $filename; move_uploaded_file($tempFilePath, $targetFilePath); echo '文件上传成功!'; } ?> ``` 以上代码会将上传的文件移动到服务器上的指定位置,并输出"文件上传成功!"。可以根据实际需求进行进一步的处理,例如校验文件类型、限制文件大小等。 需要注意的是,在处理文件上传时,确保服务器上的目标文件夹具有写入权限。并且要谨慎处理用户上传的文件,避免潜在的安全风险,比如使用恶意文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书香水墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值