判断input[type=file]上传文件格式

本文介绍了一种使用JavaScript进行文件上传类型验证的方法。通过获取文件扩展名并将其与允许的图片格式进行比较来实现。如果文件不符合指定的格式,则会提示用户选择正确的文件类型。
input type="file"  
在js中判断文件上传类型  
  
function onSubmit(){  
            var form1 = document.forms[0];          
                var file = document.forms[0].getfile.value;  
                if (file == null||file == ""){  
                     alert("请选择要上传的图片!");  
                     return false;  
                }  
                if (file.lastIndexOf('.')==-1){    //如果不存在"."    
                    alert("路径不正确!");  
                    return false;  
                }  
                var AllImgExt=".jpg|.jpeg|.gif|.bmp|.png|";  
                var extName = file.substring(file.lastIndexOf(".")).toLowerCase();//(把路径中的所有字母全部转换为小写)          
                if(AllImgExt.indexOf(extName+"|")==-1)          
                {  
                    ErrMsg="该文件类型不允许上传。请上传 "+AllImgExt+" 类型的文件,当前文件类型为"+extName;  
                    alert(ErrMsg);  
                    return false;  
                }  
                document.forms[0].submit();  
         }  

  

  1. input type="file"  
  2. 在js中判断文件上传类型  
  3.   
  4. function onSubmit(){  
  5.             var form1 = document.forms[0];          
  6.                 var file = document.forms[0].getfile.value;  
  7.                 if (file == null||file == ""){  
  8.                      alert("请选择要上传的图片!");  
  9.                      return false;  
  10.                 }  
  11.                 if (file.lastIndexOf('.')==-1){    //如果不存在"."    
  12.                     alert("路径不正确!");  
  13.                     return false;  
  14.                 }  
  15.                 var AllImgExt=".jpg|.jpeg|.gif|.bmp|.png|";  
  16.                 var extName = file.substring(file.lastIndexOf(".")).toLowerCase();//(把路径中的所有字母全部转换为小写)          
  17.                 if(AllImgExt.indexOf(extName+"|")==-1)          
  18.                 {  
  19.                     ErrMsg="该文件类型不允许上传。请上传 "+AllImgExt+" 类型的文件,当前文件类型为"+extName;  
  20.                     alert(ErrMsg);  
  21.                     return false;  
  22.                 }  
  23.                 document.forms[0].submit();  
  24.          }  

转载于:https://www.cnblogs.com/DreamerLeaf/p/7728579.html

在HTML中使用 `<input type="file">` 上传文件时,可以通过 `FormData` 对象来处理文件数据,并结合 `XMLHttpRequest` 或 `fetch` API 发送请求。这种方式能够实现异步上传文件,而无需刷新页面。 当用户通过 `<input type="file">` 选择文件后,可以监听 `change` 事件,获取到文件对象并将其附加到 `FormData` 实例中。接着,通过 `XMLHttpRequest` 或 `fetch` 方法将数据发送到服务器。需要注意的是,为了确保文件数据正确传输,请求头中不应设置 `Content-Type`,因为浏览器会自动处理边界(boundary)和内容类型。 以下是一个完整的示例代码,展示了如何通过 `<input type="file">` 和 `FormData` 实现文件上传: ```html <!-- HTML部分 --> <input type="file" id="fileInput" /> <button onclick="uploadFile()">上传文件</button> ``` ```javascript // JavaScript部分 function uploadFile() { const fileInput = document.getElementById('fileInput'); const file = fileInput.files[0]; if (!file) { alert('请选择一个文件'); return; } const formData = new FormData(); formData.append('file', file); // 将文件附加到FormData对象中[^5] fetch('/upload', { method: 'POST', body: formData, headers: { // 不需要手动设置Content-Type,浏览器会自动处理 // 'Content-Type': 'multipart/form-data' // 错误示例,不应手动设置 } }) .then(response => response.json()) .then(data => { console.log('上传成功:', data); }) .catch(error => { console.error('上传失败:', error); }); } ``` 在上述代码中,`FormData` 对象通过 `append` 方法将选中的文件以键值对的形式添加进去,然后作为请求体传递给 `fetch` API。服务器端应配置为能够接收 `multipart/form-data` 类型的数据,并解析 `FormData` 中的文件内容。 此外,还可以通过 `XMLHttpRequest` 来实现相同的功能,如下所示: ```javascript const xhr = new XMLHttpRequest(); xhr.open('POST', '/upload', true); xhr.onload = function () { if (xhr.status === 200) { console.log('上传成功:', xhr.responseText); } else { console.error('上传失败:', xhr.statusText); } }; const fileInput = document.getElementById('fileInput'); const file = fileInput.files[0]; const formData = new FormData(); formData.append('file', file); // 将文件附加到FormData对象中[^5] xhr.send(formData); ``` 无论使用 `fetch` 还是 `XMLHttpRequest`,都需要注意以下几点: - **避免手动设置 `Content-Type` 请求头**:当使用 `FormData` 上传文件时,浏览器会自动设置 `Content-Type` 为 `multipart/form-data`,并包含正确的边界(boundary)信息。如果手动设置 `Content-Type`,可能会导致服务器无法正确解析上传的文件。 - **确保服务器端支持文件上传**:服务器端需要能够处理 `multipart/form-data` 格式的请求,并能够解析上传的文件。通常,后端框架(如 Node.js 的 `multer`、Python 的 `Flask` 或 `Django` 等)都提供了相应的中间件或库来处理文件上传。 - **文件大小限制**:在实际应用中,可能需要对上传文件的大小进行限制,防止用户上传过大的文件导致服务器负载过高。可以在前端通过 `file.size` 属性进行判断,并给出提示[^1]。 通过上述方法,可以轻松实现基于 `<input type="file">` 和 `FormData` 的文件上传功能,并通过 AJAX 异步提交文件数据。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值