宁德网络公司哪家好【宁德企业网站百度SEO推广公司】宁德做网站开发价格、宁德淘宝店铺开店装修设计运营、公司网站制作方案流程改版维护费用、宁德高端企业网站页面制作设计专业公司需要多少钱
宁德市隶属于福建省,别称闽东,中国大黄鱼之乡,国家园林城市。位于福建省东北翼沿海、福建闽东地区,东临东海,与台湾隔海相望,西邻南平,南接省会福州市,北接浙江,是福建离“长三角”和日本、韩国最近的城市。土地面积1.34万平方公里,直接相邻的海域面积4.46万平方公里,拥有世界级天然深水港三都澳。地形以丘陵山地为主,沿海为小平原,属中亚热带海洋性季风气候。
宁德也是中国东南沿海休闲度假和生态旅游的胜地 [1] ,境内共有1个世界地质公园、2个5A级景区、3个国家级风景名胜区和7个省级风景名胜区。 [2] 滨海有嵛山、台山列岛、大京、西洋岛、三都澳等海岸景区;内陆拥有国家级森林公园2个,省级森林公园4个,国家级湿地公园1个,省级自然保护区2个,市级自然保护区9个。2019年11月15日,宁德市被授予“国家森林城市”称号。 [3]
文件上传对于网站来说意义非凡,今天来挖挖nodejs上传文件的完整功能,支持多文件批量上传以及讲解相关技术点和注意事项。
文件上传我们一般使用form表单选取文件进行上传,有两种方法实现,一种是传统意义的form表单:
复制代码<form action="/upload" method="post"><input type="file" name="myfile" id="myfile" mutiple/><input type="submit" value="上传" id="submit"/></form>复制代码
还有一种是通过js创建表单,效果是一样的,只不过通过js来创建灵活性强:
复制代码html:<input type="file" name="myfile" id="myfile" mutiple/><input type="submit" value="上传" id="submit"/>js:<script>function uploadFile(){var formData = new FormData();var files = document.getElementById("myfiles").files;formData.enctype="multipart/form-data";var fileArray=[].slice.call(files,0);//类数组转换为数组fileArray.forEach(function(file){formData.append("myfile",file);//循环遍历把文件对象插到formData对象上});var xhr = new XMLHttpRequest();xhr.open("post","/upload",true);//发送post请求到/uploadxhr.onload = function (e) {if(this.status == 200){document.getElementById("result").innerHTML = this.response;}};xhr.send(formData);}var input=document.getElementById("submit");input.onclick=uploadFile;//绑定事件</script>复制代码以上为前端页面html的准备,现在开始处理服务端的路由逻辑了。路由的设计就不多讲了,测试用例直接放app.js(入口文件)。需要用到的模块express、formidable、fs。如果没有安装这些模块,请自觉npm insatll express --save-dev和npm insatll formidable --save-dev,当然fs是nodejs自带的模块,不需要安装,如果你的node没有这个模块,那你一定是装了一个假的node。
node服务器端的代码:
复制代码var express = require('express');var app = express();var formidable = require('formidable');var fs = require('fs'); app.post('/upload', function(req, res, next) {//对应前端请求的路径,请求方法var form = formidable.IncomingForm({encoding : 'utf-8',//上传编码uploadDir : "public/files",//上传目录,指的是服务器的路径,如果不存在将会报错。keepExtensions : true,//保留后缀maxFieldsSize : 2 * 1024 * 1024//byte//最大可上传大小});var allFile=[];form.on('progress', function(bytesReceived, bytesExpected) {//在控制台打印文件上传进度var progressInfo = {value: bytesReceived,total: bytesExpected};console.log('[progress]: ' + JSON.stringify(progressInfo));res.write(JSON.stringify(progressInfo));}).on('file', function (filed, file) {allFile.push([filed, file]);//收集传过来的所有文件}).on('end', function() {res.end('上传成功!');}).on('error', function(err) {console.error('上传失败:', err.message);next(err);}).parse(req,function(err, fields, files){if(err){console.log(err);}allFile.forEach(function(file,index){var fieldName=file[0];var types = file[1].name.split('.');var date = new Date();var ms = Date.parse(date);fs.renameSync(file[1].path,form.uploadDir+"/"+types[0]+"."+String(types[types.length-1]));//重命名文件,默认的文件名是带有一串编码的,我们要把它还原为它原先的名字。});});});复制代码在前端选择文件后,点击上传文件之后就把文件都成功上传到服务端的public/files文件夹里了,如果失败了,你一定是复制了一份我的假的代码。关键要理解,关键要理解,关键要理解。
当然后续功能还有许多可以做的,比如说检查文件的重复性,文件类型限制等其它安全因素隔离。