javascript File Api

本文详细介绍使用Scripting.FileSystemObject进行文件属性获取、复制、删除等操作,以及利用JavaScript实现图片压缩、转换和上传的实用代码。涵盖File对象、Base64、Canvas对象的运用,适合前端开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

属性:

属性描述
Attributes设置或返回文件或文件夹的属性
DateCreated返回指定文件或文件夹的创建时间
DateLastAccessed返回最近访问文件或文件夹的创建时间
DateLastModified返回最后修改指定文件和文件夹的日期和日期
Drive返回指定文件或文件夹所在的驱动器的驱动器号
Name设置或返回文件或文件夹的名称
ParentFolder返回指定文件或文件夹的父文件夹对象
Path返回指定文件或文件夹或驱动器的路径
ShortName返回短名称
ShortPath返回短路径
Size对于文件,以字节为单位返回指定文件的大小.
对于文件夹,以字节为单位返回文件夹中包含的所有子文件夹中的所有文件和子文件夹的大小
Type返回文件或文件夹的信息.

例子:

例子效果
        var filepath="D:\\Test\\文本1.txt";
        var fso = new ActiveXObject("Scripting.FileSystemObject");
        var file = fso.GetFile(filepath);
        dispay("DateCreated:"+file.DateCreated);
        dispay("DateLastAccessed:"+file.DateLastAccessed);
        dispay("DateLastModified:"+file.DateLastModified);
        dispay("Drive:"+file.Drive);
        dispay("Name:"+file.Name);
        dispay("ParentFolder:"+file.ParentFolder);
        dispay("Path:"+file.Path);
        dispay("ShortName:"+file.ShortName);
        dispay("ShortPath:"+file.ShortPath);
        dispay("Size:"+file.Size);
        dispay("Type:"+file.Type);        
        
        function dispay(value){
            document.write(value+"<br/>");
        }
image

属性:Attributes

常数描述
Normal0普通文件
ReadOnly1只读文件
Hidden2隐藏文件
System4系统文件
Volume8磁盘驱动器卷标
Directory16文件夹或目录
Artichive32文件在上次备份后已经修改
Alias64链接或者快捷方式
Compressed128压缩未见

例子:

例子效果
        var filepath="D:\\Test\\文本2.txt";
        var fso = new ActiveXObject("Scripting.FileSystemObject");
        var file = fso.GetFile(filepath);
        document.write(file.attributes);
32

方法:

方法描述备注
obj.CopyFile(source,destination[,overwrite])将制定的文件或文件夹从一个位置复制到另一个位置obj:文件或文件夹
source:源文件
destination:必须的,复制文件或文件夹的目的位置
overwrite:可选.覆盖为true,否则为false,默认为true
obj.DeleteFile(file,[force])删除指定的文件或文件夹obj:文件或文件夹
file:要删除的文件
force:可选,boolean值,如果要删除设置了只读属性的文件或文件夹,则为true,否则为false
obj.MoveFile(Source, Destination)将制定的文件或文件夹从一个位置剪切到另一个位置Source:文件或文件夹
Destination:移动文件或文件夹的目标位置
obj.OpenTextFile(FileName, IOMode, Create, Format)打开指定的文件,并返回一个TextStream对象,
通过这个对象对文件进行读、写或追加
FileName:应该为File对象的名称
IOMode:可选项,指定的输入/输出模式,可以是三个常数之一:
             ForReading,ForWriting,ForAppend
Create:创建文件
Fomat:可选项,使用三态值中的一个来指明打开文件的格式,
           如果忽略,文件以ASCII格式打开

iomode:

常数描述
ForReading0以只读的方式打开文件,不能写这个文件
ForWriting1以写方式打开文件,如果存在同名的文件,那么它以前的内容将被覆盖
ForAppend8打开文件,并从文件末尾开始写

format:

常数描述
TristateUseDefault-2使用系统默认值打开
TristateTrue-1以Unicode方式打开
TristateFalse0以ASCII方式打开

 

图片转换js (img对象,file对象,base64,canvas对象),压缩图片

首先想一想我们有哪些需求?大多时候我们需要将一个File对象压缩之后再变为File对象传入到远程图片服务器;有时候我们也需要将一个base64字符串压缩之后再变为base64字符串传入到远程数据库;有时候后它还有可能是一块canvas画布,或者是一个Image对象,或者直接就是一个图片的url地址,我们需要将它们压缩上传到远程;

 

1、 urltoImage(url,fn) 会通过一个url加载所需要的图片对象,其中 url 参数传入图片的 url , fn 为回调方法,包含Image对象的参数,代码如下:

function urltoImage (url,fn){

    var img = new Image();

    img.src = url;

    img.onload = function(){

        fn(img);

    }

};

2、 imagetoCanvas(image) 会将一个 Image 对象转变为一个 Canvas 类型对象,其中 image 参数传入Image对象,代码如下:

function imagetoCanvas(image){
    
    var cvs = document.createElement("canvas");

    var ctx = cvs.getContext('2d');

    cvs.width = image.width;

    cvs.height = image.height;

    ctx.drawImage(image, 0, 0, cvs.width, cvs.height);

    return cvs ;

};

3、 canvasResizetoFile(canvas,quality,fn) 会将一个 Canvas 对象压缩转变为一个 Blob 类型对象;其中 canvas 参数传入一个 Canvas 对象; quality 参数传入一个0-1的 number 类型,表示图片压缩质量; fn 为回调方法包含一个 Blob 对象参数;代码如下:

function canvasResizetoFile(canvas,quality,fn){

    canvas.toBlob(function(blob) {

        fn(blob);

    },'image/jpeg',quality);

};
//这里的 Blob 对象表示不可变的类似文件对象的原始数据。 Blob 表示不一定是 JavaScript 原生形式
//的数据。 File 接口基于 Blob ,继承了 Blob 的功能并将其扩展使其支持用户系统上的文件。我们可以
//把它当做File类型对待,其他更具体的用法可以参考MDN文档

 

4、 canvasResizetoDataURL(canvas,quality) 会将一个 Canvas 对象压缩转变为一个 dataURL 字符串,其中 canvas 参数传入一个 Canvas 对象; quality 参数传入一个0-1的 number 类型,表示图片压缩质量;代码如下:

methods.canvasResizetoDataURL = function(canvas,quality){

    return canvas.toDataURL('image/jpeg',quality);

};
//其中的 toDataURL API可以参考MDN文档

5、 filetoDataURL(file,fn) 会将 File ( Blob )类型文件转变为 dataURL 字符串,其中 file 参数传入一个 File ( Blob )类型文件; fn 为回调方法,包含一个 dataURL 字符串的参数;代码如下:​​​​​​​

function filetoDataURL(file,fn){

var reader = new FileReader();

reader.onloadend = function(e){

fn(e.target.result);

};

reader.readAsDataURL(file);

};

6、 dataURLtoImage(dataurl,fn) 会将一串 dataURL 字符串转变为 Image 类型文件,其中 dataurl 参数传入一个 dataURL 字符串, fn 为回调方法,包含一个 Image 类型文件的参数,代码如下:

function dataURLtoImage(dataurl,fn){

var img = new Image();

img.onload = function() {

fn(img);

};

img.src = dataurl;

};

?

7、 dataURLtoFile(dataurl) 会将一串 dataURL 字符串转变为 Blob 类型对象,其中 dataurl 参数传入一个 dataURL 字符串,代码如下:​​​​​​​

function dataURLtoFile(dataurl) {

var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],

bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);

while(n--){

u8arr[n] = bstr.charCodeAt(n);

}

return new Blob([u8arr], {type:mime});

};

三、进一步封装

对于常用的将一个 File 对象压缩之后再变为 File 对象,我们可以将上面的方法再封装一下,参考如下代码:

function fileResizetoFile(file,quality,fn){

    filetoDataURL (file,function(dataurl){

        dataURLtoImage(dataurl,function(image){

            canvasResizetoFile(imagetoCanvas(image),quality,fn);

        })

    })

}

其中, file 参数传入一个 File ( Blob )类型文件; quality 参数传入一个 0-1 的 number 类型,表示图片压缩质量; fn 为回调方法,包含一个 Blob 类型文件的参数。

它使用起来就像下面这样:

下面看下JS等比压缩图片的办法

?​​

function proDownImage(path,imgObj) { // 等比压缩图片工具

    var proMaxHeight=300;

    var proMaxWidth = 175;

    var size = new Object(); 

    var image = new Image(); 

    image.src = path; 

    image.attachEvent("onreadystatechange",

    function() { // 当加载状态改变时执行此方法,因为img的加载有延迟

        if (image.readyState == "complete") { // 当加载状态为完全结束时进入

            if (image.width > 0 && image.height > 0) {

                var ww = proMaxWidth / image.width;

                var hh = proMaxHeight / image.height; 

                var rate = (ww < hh) ? ww: hh;

                if (rate <= 1) { 

                    alert("imgage width*rate is:" + image.width * rate);

                    size.width = image.width * rate;

                    size.height = image.height * rate;

                } else {
    
                    alert("imgage width is:" + image.width);  

                    size.width = image.width;  

                    size.height = image.height;   

                } 

            }

        }

    imgObj.attr("width",size.width);

    imgObj.attr("height",size.height);

});

}

参考链接https://blog.csdn.net/twtcqw2008/article/details/80766914

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值