HTML5 文件域+FileReader 读取文件并上传到服务器(三)
一、读取文件为blob并上传到服务器
HTML
<div class="container"> <!--读取要上传的文件--> <input type="file" id="file" /> <input type="button" id="btn1" value="点击上传" onclick="uploadClick();" /> </div>
JS
//读取图片实例,并上传到服务器 var fileBox = document.getElementById('file'); fileBox.onchange = function () { //获取选择文件的数组 var fileList = fileBox.files; for (var i = 0; i < fileList.length; i++) { var file = fileList[i]; uploadFile(file); } } //关键代码上传到服务器 function uploadFile(file) { var reader = new FileReader(); reader.readAsArrayBuffer(file); reader.onload = function () { var blob = new Blob([reader.result]); //提交到服务器 var fd = new FormData(); fd.append('file', blob); var ext = file.name.substring(file.name.lastIndexOf('.')); fd.append('extention', ext); fd.append('maxsize', 1024*1024*4);//Asp.net 默认一次上传最大4MB fd.append('isClip', -1); var xhr = new XMLHttpRequest(); xhr.open('post', '../ashx/upload.ashx', true); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { var data = eval('(' + xhr.responseText + ')'); console.info(data); if (data.success) { //上传成功 var imgName = data.msg; alert(imgName); } else { alert(data.msg); } } } //开始发送 xhr.send(fd); } }
后台C#处理关键代码:
//接收文件 HttpRequest req = _Context.Request; string newname = _fileInfo.CreateNewName(newExtention); //接收二级制数据并保存 Stream stream = _PostedFile.InputStream; byte[] dataOne = new byte[stream.Length]; stream.Read(dataOne, 0, dataOne.Length); FileStream fs = new FileStream(_fileInfo.TempFile + newname, FileMode.Create, FileAccess.Write); try { fs.Write(dataOne, 0, dataOne.Length); } finally { fs.Close(); stream.Close(); } return newname;
二、读取图片文件,并上传到服务器
HTML
<div class="container"> <!--图片类型验证方法1--> <input type="file" id="file" accept="image/*" /> <input type="button" id="btn1" value="点击上传" onclick="uploadClick();" /> <h4>选择文件如下:</h4> <img src="" id="img1" /> </div>
JS:
//读取图片实例,并上传到服务器 var fileBox = document.getElementById('file'); fileBox.onchange = function () { //获取选择文件的数组 var fileList = fileBox.files; for (var i = 0; i < fileList.length; i++) { var file = fileList[i]; //图片类型验证第二种方式 if (/image\/\w+/.test(file.type)) readFile(file); else console.log(file.name + ':不是图片'); } } //读取二进制图片文件,并上传到服务器 function uploadClick() { var fileList = fileBox.files; for (var i = 0; i < fileList.length; i++) { var file = fileList[i]; //图片类型验证第二种方式 if (/image\/\w+/.test(file.type)) uploadFile(file); else console.log(file.name + ':不是图片'); } } //关键代码上传到服务器 function uploadFile(file) { var reader = new FileReader(); reader.readAsArrayBuffer(file); reader.onload = function () { var blob = new Blob([reader.result], { type: 'image/jpg' }); //提交到服务器 var fd = new FormData(); fd.append('file', blob); var ext = file.name.substring(file.name.lastIndexOf('.')); fd.append('extention', ext); fd.append('isClip', -1); var xhr = new XMLHttpRequest(); xhr.open('post', '../ashx/upload.ashx', true); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { var data = eval('(' + xhr.responseText + ')'); console.info(data); if (data.success) { //上传成功 var imgName = data.msg; alert(imgName); } else { alert(data.msg); } } } //开始发送 xhr.send(fd); } } //读取图片内容 为DataURL function readFile(file) { var reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function (e) { var result = reader.result; $('.container blockquote').text(result); $('#img1').attr('src', result) } }
后台关键代码处理同上。
分类:
HTML5-FileAPI
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2015-09-04 解决Android AVD启动报错问题
2015-09-04 AVD启动不了 ANDROID_SDK_HOME is defined but could not find *.ini
2014-09-04 Controller返回值类型ActionResult