当前位置:首页 > 技术 >

在html中输出对象中的指定属性值(html五种新增加的属性是)

来源:原点资讯(m.360kss.com)时间:2023-04-17 02:05:40作者:YD166手机阅读>>

然后在后续中间件内得到已保存的文件的信息,再做二次处理。

  • ctx.request.files.f1 得到文件信息,f1为input file 标签的 name
  • 获得文件的扩展名,重命名文件

NODE

/** * 服务入口 */ var http = require('http'); var koaStatic = require('koa-static'); var path = require('path'); var koaBody = require('koa-body');//文件保存库 var fs = require('fs'); var Koa = require('koa2'); var app = new Koa(); var port = process.env.PORT || '8100'; var uploadHost= `http://localhost:${port}/uploads/`; app.use(koaBody({ formidable: { //设置文件的默认保存目录,不设置则保存在系统临时目录下 os uploadDir: path.resolve(__dirname, '../static/uploads') }, multipart: true // 开启文件上传,默认是关闭 })); //开启静态文件访问 app.use(koaStatic( path.resolve(__dirname, '../static') )); //文件二次处理,修改名称 app.use((ctx) => { var file = ctx.request.files.f1;//得道文件对象 var path = file.path; var fname = file.name;//原文件名称 var nextPath = path fname; if(file.size>0 && path){ //得到扩展名 var extArr = fname.split('.'); var ext = extArr[extArr.length-1]; var nextPath = path '.' ext; //重命名文件 fs.renameSync(path, nextPath); } //以 JSON 形式输出上传文件地址 ctx.body = `{ "fileUrl":"${uploadHost}${nextPath.slice(nextPath.lastIndexOf('/') 1)}" }`; }); /** * http server */ var server = http.createServer(app.callback()); server.listen(port); console.log('demo1 server start ...... '); 复制代码

CODE

https://github.com/Bigerfe/fe-learn-code/tree/master/src/upfiles-demo

多文件上传

在 ie 时代的多文件上传是需要创建多个 input file 标签,现在 html5只需要一个标签加个属性就搞定了,file 标签开启multiple。

DEMO

在html中输出对象中的指定属性值,html五种新增加的属性是(5)

HTML

//设置 multiple属性 <input type="file" name="f1" multiple/> 复制代码

NODE

服务端也需要进行简单的调整,由单文件对象变为多文件数组,然后进行遍历处理。

//二次处理文件,修改名称 app.use((ctx) => { var files = ctx.request.files.f1;// 多文件, 得到上传文件的数组 var result=[]; //遍历处理 files && files.forEach(item=>{ var path = item.path; var fname = item.name;//原文件名称 var nextPath = path fname; if (item.size > 0 && path) { //得到扩展名 var extArr = fname.split('.'); var ext = extArr[extArr.length - 1]; var nextPath = path '.' ext; //重命名文件 fs.renameSync(path, nextPath); //文件可访问路径放入数组 result.push(uploadHost nextPath.slice(nextPath.lastIndexOf('/') 1)); } }); //输出 json 结果 ctx.body = `{ "fileUrl":${JSON.stringify(result)} }`; }) 复制代码

CODE

https://github.com/Bigerfe/fe-learn-code/tree/master/src/upfiles-demo

局部刷新 - iframe

这里说的是在 ie 时代的上传文件局部刷新,借助 iframe 实现。

DEMO

在html中输出对象中的指定属性值,html五种新增加的属性是(6)

  • 局部刷新

页面内放一个隐藏的 iframe,或者使用 js 动态创建,指定 form 表单的 target 属性值为iframe标签 的 name 属性值,这样 form 表单的 shubmit 行为的跳转就会在 iframe 内完成,整体页面不会刷新。

  • 拿到接口数据

然后为 iframe 添加load事件,得到 iframe 的页面内容,将结果转换为 JSON 对象,这样就拿到了接口的数据

HTML

<iframe id="temp-iframe" name="temp-iframe" src="" style="display:none;"></iframe> <form method="post" target="temp-iframe" action="http://localhost:8100" enctype="multipart/form-data"> 选择文件(可多选): <input type="file" name="f1" id="f1" multiple/><br/> input 必须设置 name 属性,否则数据无法发送<br/> <br/> 标题:<input type="text" name="title"/><br/><br/><br/> <button type="submit" id="btn-0">上 传</button> </form> <script> var iframe = document.getElementById('temp-iframe'); iframe.addEventListener('load',function () { var result = iframe.contentWindow.document.body.innerText; //接口数据转换为 JSON 对象 var obj = JSON.parse(result); if(obj && obj.fileUrl.length){ alert('上传成功'); } console.log(obj); }); </script> 复制代码

NODE

服务端代码不需要改动,略.

CODE

https://github.com/Bigerfe/fe-learn-code/tree/master/src/upfiles-demo

无刷新上传

无刷新上传文件肯定要用到XMLHttpRequest,在 ie 时代也有这个对象,单只 支持文本数据的传输,无法用来读取和上传二进制数据。

现在已然升级到了XMLHttpRequest2,较1版本有非常大的升级,首先就是可以读取和上传二进制数据,可以使用·FormData·对象管理表单数据。

当然也可使用 fetch 进行上传。

DEMO

在html中输出对象中的指定属性值,html五种新增加的属性是(7)

HTML

<div> 选择文件(可多选): <input type="file" id="f1" multiple/><br/><br/> <button type="button" id="btn-submit">上 传</button> </div> 复制代码

JS xhr

<script> function submitUpload() { //获得文件列表,注意这里不是数组,而是对象 var fileList = document.getElementById('f1').files; if(!fileList.length){ alert('请选择文件'); return; } var fd = new FormData(); //构造FormData对象 fd.append('title', document.getElementById('title').value); //多文件上传需要遍历添加到 fromdata 对象 for(var i =0;i<fileList.length;i ){ fd.append('f1', fileList[i]);//支持多文件上传 } var xhr = new XMLHttpRequest(); //创建对象 xhr.open('POST', 'http://localhost:8100/', true); xhr.send(fd);//发送时 Content-Type默认就是: multipart/form-data; xhr.onreadystatechange = function () { console.log('state change', xhr.readyState); if (this.readyState == 4 && this.status == 200) { var obj = JSON.parse(xhr.responseText); //返回值 console.log(obj); if(obj.fileUrl.length){ alert('上传成功'); } } } } //绑定提交事件 document.getElementById('btn-submit').addEventListener('click',submitUpload); </script> 复制代码

JS Fetch

fetch('http://localhost:8100/', { method: 'POST', body: fd }) .then(response => response.json()) .then(response =>{ console.log(response); if (response.fileUrl.length) { alert('上传成功'); } } ) .catch(error => console.error('Error:', error)); 复制代码

CODE

https://github.com/Bigerfe/fe-learn-code/tree/master/src/upfiles-demo

多文件,单进度

借助XMLHttpRequest2的能力,实现多个文件或者一个文件的上传进度条的显示。

DEMO

在html中输出对象中的指定属性值,html五种新增加的属性是(8)

栏目热文

怎样使用echo输出html标记(echo输出两个值)

怎样使用echo输出html标记(echo输出两个值)

在 PHP 中有两个基本的输出方式: echo 和 print。本弹中我们会详细讨论两个语句的用法,并在实例中演示如何使...

2023-04-17 02:35:18查看全文 >>

西瓜视频的水印怎样去掉(西瓜视频里的个人的水印怎么去掉)

西瓜视频的水印怎样去掉(西瓜视频里的个人的水印怎么去掉)

教你简单的一键无痕去除视频中的水印复制视频链接就能去除水印目前已支持去水印的平台视频链接 :抖音、快手、小红书(不可去水...

2023-04-17 02:44:54查看全文 >>

去除西瓜视频中的水印(怎么去掉西瓜视频自带的水印)

去除西瓜视频中的水印(怎么去掉西瓜视频自带的水印)

短视频大热,要说现在是视频时代也不为过,我们经常会在网上下载一些视频,但是有些视频都是带水印的,使用起来比较麻烦,今天就...

2023-04-17 02:09:28查看全文 >>

西瓜视频上的水印怎么去除(怎么去掉西瓜视频自带的水印)

西瓜视频上的水印怎么去除(怎么去掉西瓜视频自带的水印)

平时大家在西瓜、抖音、快手这些平台上下载视频,是如何去除视频中的水印的。想必大家都是在电脑下载一些专业的去水印工具来去除...

2023-04-17 02:00:18查看全文 >>

如何去掉西瓜视频中的水印(怎么去除西瓜视频的水印)

如何去掉西瓜视频中的水印(怎么去除西瓜视频的水印)

最近有朋友在问我,怎么把视频中带有Logo水印标志去除,其实视频中的水印是去不除的,我们只是把视频打上一个马赛克,让马赛...

2023-04-17 02:04:02查看全文 >>

html怎么做判断(html判断条件)

html怎么做判断(html判断条件)

方法1:使用isNaN()函数isNaN()函数是js自带的全局函数,isNaN() 函数用于检查其参数是否是非数字值。...

2023-04-17 02:35:56查看全文 >>

html中echo怎么用(html语音标签怎么设置)

html中echo怎么用(html语音标签怎么设置)

功能要求使用echo语句在页面中输出字符串信息。实例代码<!doctype html><html>...

2023-04-17 02:42:38查看全文 >>

html中的target属性(html哪些标签有name属性)

html中的target属性(html哪些标签有name属性)

通常,在网页中使用链接时,如果希望浏览器在新选项卡中打开指定的 URL,就会在 a 标记上添加属性 target = “...

2023-04-17 02:16:21查看全文 >>

html target怎么用(html target属性的使用)

html target怎么用(html target属性的使用)

在我们的开发工程中经常会使用到各种图,所谓的图就是由节点和节点之间的连接所形成的系统,数学上专门有一个分支叫图论(Gra...

2023-04-17 01:59:37查看全文 >>

html里的target(html中的target是干什么的)

html里的target(html中的target是干什么的)

伪类选择器区别于类选择器,类选择器是由用户自己定义的,而伪类选择器是在CSS中已经定义好的选择器。:target对页面某...

2023-04-17 02:15:57查看全文 >>

文档排行