JavaScript文件上载大小验证

JavaScript文件上载大小验证,javascript,validation,file-upload,Javascript,Validation,File Upload,在使用JavaScript上传文件之前,是否有方法检查文件大小?否是,在较新的浏览器中使用文件API。详见TJ的答案 如果您还需要支持较旧的浏览器,则必须使用基于Flash的上载程序,如or 显示了文件大小限制设置的工作方式 请注意,这(显然)需要Flash,而且它的工作方式与普通上传表单有点不同。是的,您可以使用 下面是一个完整的示例(请参见注释): document.getElementById(“btnLoad”).addEventListener(“单击”,函数showFileSize

在使用JavaScript上传文件之前,是否有方法检查文件大小?

否是,在较新的浏览器中使用文件API。详见TJ的答案

如果您还需要支持较旧的浏览器,则必须使用基于Flash的上载程序,如or

显示了
文件大小限制
设置的工作方式


请注意,这(显然)需要Flash,而且它的工作方式与普通上传表单有点不同。

是的,您可以使用

下面是一个完整的示例(请参见注释):

document.getElementById(“btnLoad”).addEventListener(“单击”,函数showFileSize(){
//(无法使用`typeof FileReader==“function”`因为
//在某些浏览器上返回为“对象”。所以只要看看它是否在那里就可以了
//(完全没有。)
如果(!window.FileReader){//这是不太可能的,那么浏览器支持几乎是通用的
log(“此浏览器尚不支持文件API”);
返回;
}
var input=document.getElementById('fileinput');
如果(!input.files){//这是不太可能的,浏览器支持几乎是通用的
console.error(“此浏览器似乎不支持文件输入的`files`属性。”);
}如果(!input.files[0]),则为else{
addPara(“请在单击“加载”之前选择一个文件”);
}否则{
var file=input.files[0];
addPara(“File”+File.name+”是“+File.size+”字节大小”);
}
});
函数addPara(文本){
var p=document.createElement(“p”);
p、 text内容=文本;
文件.正文.附件(p);
}
正文{
字体系列:无衬线;
}

您可以试试这个

它可以在IE6(及以上)、Chrome或Firefox下使用jquery正常工作:

<form action="upload" enctype="multipart/form-data" method="post">
                
    Upload image:
    <input id="image-file" type="file" name="file" />
    <input type="submit" value="Upload" />

    <script type="text/javascript">
        $('#image-file').bind('change', function() {
            alert('This file size is: ' + this.files[0].size/1024/1024 + "MiB");
        });
    </script>

</form>

上载图像:
$(“#图像文件”).bind('change',function(){
警报('此文件大小为:'+This.files[0].size/1024/1024+“MiB”);
});

如果使用jQuery验证,可以编写如下内容:

$.validator.addMethod(
“最大文件大小”,
函数(值、元素){
if(this.optional(element)| | |!element.files | |!element.files[0]){
返回true;
}否则{

return element.files[0].size我使用了在Mozilla开发者网络站点上找到的一个主要Javascript函数,以及另一个AJAX函数,并根据需要进行了更改。它会收到一个文档元素id,该id与我希望在html代码中写入文件大小的位置有关

<Javascript>

function updateSize(elementId) {
    var nBytes = 0,
    oFiles = document.getElementById(elementId).files,
    nFiles = oFiles.length;

    for (var nFileId = 0; nFileId < nFiles; nFileId++) {
        nBytes += oFiles[nFileId].size;
    }
    var sOutput = nBytes + " bytes";
    // optional code for multiples approximation
    for (var aMultiples = ["K", "M", "G", "T", "P", "E", "Z", "Y"], nMultiple = 0, nApprox = nBytes / 1024; nApprox > 1; nApprox /= 1024, nMultiple++) {
        sOutput = " (" + nApprox.toFixed(3) + aMultiples[nMultiple] + ")";
    }

    return sOutput;
}
</Javascript>

<HTML>
<input type="file" id="inputFileUpload" onchange="uploadFuncWithAJAX(this.value);" size="25">
</HTML>

<Javascript with XMLHttpRequest>
document.getElementById('spanFileSizeText').innerHTML=updateSize("inputFileUpload");
</XMLHttpRequest>

函数updateSize(elementId){
var nBytes=0,
oFiles=document.getElementById(elementId).files,
n文件=文件长度;
对于(var nFileId=0;nFileId1;nApprox/=1024,n倍数++){
sOutput=“(“+nApprox.toFixed(3)+aMultiples[nMultiple]+”);
}
回输;
}
document.getElementById('spanFileSizeText')。innerHTML=updateSize(“inputFileUpload”);

干杯

如果您将Ie“文档模式”设置为“标准”,则可以使用简单的javascript“大小”方法获取上传文件的大小

将Ie“文档模式”设置为“标准”:

<meta http-equiv="X-UA-Compatible" content="IE=Edge">

然后,使用“size”javascript方法获取上传文件的大小:

<script type="text/javascript">
    var uploadedFile = document.getElementById('imageUpload');
    var fileSize = uploadedFile.files[0].size;
    alert(fileSize); 
</script>

var uploadedFile=document.getElementById('imageUpload');
var fileSize=uploadedFile.files[0]。大小;
警报(文件大小);
这对我很有用。

这很简单

const-oFile=document.getElementById(“文件上载”).files[0];//
如果(oFile.size>2097152)//2个MiB表示字节。
{
警报(“文件大小必须小于2MiB!”);
返回;
}

即使问题已经回答,我还是想发布我的答案。可能对未来的观众很方便。您可以像在下面的代码中一样使用它

<input type="file" id="fileinput" />
<script type="text/javascript">
  function readSingleFile(evt) {
    //Retrieve the first (and only!) File from the FileList object
    var f = evt.target.files[0]; 
    if (f) {
      var r = new FileReader();
      r.onload = function(e) { 
          var contents = e.target.result;
        alert( "Got the file.n" 
              +"name: " + f.name + "n"
              +"type: " + f.type + "n"
              +"size: " + f.size + " bytesn"
              + "starts with: " + contents.substr(1, contents.indexOf("n"))
        ); 
        if(f.size > 5242880) {
               alert('File size Greater then 5MiB!');
                }

         
      }
      r.readAsText(f);
    } else { 
      alert("Failed to load file");
    }
  }

函数readSingleFile(evt){
//从FileList对象检索第一个(也是唯一的!)文件
var f=evt.target.files[0];
如果(f){
var r=新文件读取器();
r、 onload=函数(e){
var内容=e.target.result;
警报(“已获取文件.n”
+“名称:”+f.name+“n”
+“类型:”+f.type+“n”
+“大小:”+f.size+“字节数”
+以“+contents.substr(1,contents.indexOf(“n”)开头)
); 
如果(f.尺寸>5242880){
警报('文件大小大于5MiB!');
}
}
r、 readAsText(f);
}否则{
警报(“加载文件失败”);
}
}

适用于动态和静态文件元素

Javascript唯一解决方案

函数validateSize(输入){
const fileSize=input.files[0].size/1024/1024;//在MiB中
如果(文件大小>2){
警报(“文件大小超过2 MiB”);
//$(file.val(“”);//用于使用Jquery进行清除
}否则{
//继续
}
}

此线程中提供的JQuery示例非常过时,而google根本没有任何帮助,因此下面是我的修订版:


$('#图像文件')。在('change',function()上{
console.log($(此)[0]。文件[0]。名称+'文件大小为:'+$(此)[0]。文件[0]。大小/1024/1024+'Mb');
});

我做了这样的东西:

$('#图像文件')。在('change',function()上{
var numb=$(this)[0]。文件[0]。大小/1024/1024;
麻木=麻木。固定(2);
如果(麻木>2){
警报('to big,最大值为2MB。您的文件大小为:'+numb+'MiB');
}否则{
警报('没问题,您的文件有'+numb+'MiB')
}
});

我遇到了这个问题,我需要的一行代码隐藏在一大块代码中

<
const myFile = document.getElementById("fileUpload").files[0]; 
            if (myFIle.size > 2097152) // 2 MiB for bytes.
            {
                alert("File size must under 2MiB!");
                return;
            }