Egg.js 中 AJax 上传文件获取参数的方法


Posted in Javascript onOctober 10, 2018

依赖

formidable

代码

前端

<fieldset style="margin: 20px; padding: 20px;">
 <legend>单文件,Ajax</legend>
 <form id="form3">
  <div>
   <input type="text" id="customName" placeholder="自定义文件名" />
  </div>
  <div>
   <input type="file" class="file" />
  </div>
  <div>
   <input type="submit" value="上传">
  </div>
 </form>
</fieldset>

<fieldset style="margin: 20px; padding: 20px;">
 <legend>多文件,Ajax</legend>
 <form id="form4">
  <div>
   <input type="file" class="file" multiple />
  </div>
  <div>
   <input type="submit" value="上传" />
  </div>
 </form>
</fieldset>
<script>
 $(function () {
  const _csrf = "{{ ctx.csrf | safe }}";
  $('form').submit(function (e) {
   e.preventDefault();
   const formData = new FormData();
   const fileList = $(this).find('.file')[0].files;
   let index = 0;
   for (let key of fileList) {
    formData.append('file' + index, key);
    index++
   }
   formData.append('isAjax', 'yes');
   formData.append('customName', $(this).find('#customName').val() || '');
   $.ajax({
    url: '/admin/file/upload?_csrf=' + _csrf,
    data: formData,
    method: 'POST',
    contentType: false,
    processData: false,
    success: function (result) {

    },
    error: function (responseStr) {
     alert("error", responseStr);
    }
   });
  });
 });
</script>

Node

'use strict';
const fs = require('fs');
const path = require('path');
const awaitWriteStream = require('await-stream-ready').write;
const sendToWormhole = require('stream-wormhole');
const formidable = require("formidable");
const Controller = require('../../core/base_controller');
class FileController extends Controller {
 async parse(req) {
  const form = new formidable.IncomingForm();
  return new Promise((resolve, reject) => {
   form.parse(req, (err, fields, files) => {
    resolve({ fields, files })
   })
  });
 }
 /**
 * 上传文件,兼容单文件和多文件
 * @param customName 单文件自定义文件名
 * @param isAjax 上传方式
 */
 async upload() {
  const { ctx, logger } = this;
  const extraParams = await this.parse(ctx.req);
  let { multipleFile, customName, isAjax } = extraParams && extraParams['fields'];
  logger.info(multipleFile, customName, isAjax);
  if (isAjax === 'yes') {
   const urls = [];
   for (let key in extraParams.files) {
    const file = extraParams.files[key];
    logger.info('file.name', file.name);
    logger.info('customName', customName);
    const stream = fs.createReadStream(file.path);
    const fileName = customName ? (customName + path.extname(file.name)) : file.name;
    const target = path.join(this.config.baseDir, 'app/public/upload', fileName);
    const writeStream = fs.createWriteStream(target);
    try {
     await awaitWriteStream(stream.pipe(writeStream));
    } catch (err) {
     await sendToWormhole(stream);
     throw err;
    }
    urls.push(target);
   }
   this.success({ urls })
  }
 }
}
module.exports = FileController;

总结

以上所述是小编给大家介绍的Egg.js 中 AJax 上传文件获取参数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
二行代码解决全部网页木马
Mar 28 Javascript
js调用activeX获取u盘序列号的代码
Nov 21 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
Nov 30 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
Aug 01 Javascript
js闭包实例汇总
Nov 09 Javascript
15个jquery常用方法、小技巧分享
Jan 13 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
Mar 05 Javascript
JavaScript html5利用FileReader实现上传功能
Mar 27 Javascript
Vue实现自带的过滤器实例
Mar 09 Javascript
webpack2.0搭建前端项目的教程详解
Apr 05 Javascript
AngularJS 实现购物车全选反选功能
Oct 24 Javascript
JavaScript中的宏任务和微任务详情
Nov 27 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
Oct 10 #Javascript
解决eclipse中没有js代码提示的问题
Oct 10 #Javascript
js实现同一个页面,多个enter事件绑定的示例
Oct 10 #Javascript
在React项目中使用Eslint代码检查工具及常见问题
Oct 10 #Javascript
jquery实现联想词搜索框和搜索结果分页的示例
Oct 10 #jQuery
Vue 重置组件到初始状态的方法示例
Oct 10 #Javascript
15个顶级开源JavaScript框架和库
Oct 10 #Javascript
You might like
Yii PHP Framework实用入门教程(详细介绍)
2013/06/18 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
php使用curl实现ftp文件下载功能
2017/05/16 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
关于IFRAME 自适应高度的研究
2006/07/20 Javascript
JavaScript中的面向对象介绍
2012/06/30 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
2016/01/18 Javascript
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
jQuery插件autocomplete使用详解
2017/02/04 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
微信小程序防止多次点击跳转(函数节流)
2019/09/19 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
python读取json文件并将数据插入到mongodb的方法
2015/03/23 Python
使用python绘制常用的图表
2016/08/27 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
HTML5和CSS3实例教程总结(推荐)
2016/07/18 HTML / CSS
The Hut英国:英国领先的豪华在线百货商店
2019/07/26 全球购物
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
Envie de Fraise意大利:法国网上推出的孕妇装品牌
2020/10/18 全球购物
假期安全教育广播稿
2014/10/04 职场文书
酒会邀请函
2015/01/31 职场文书
研究生简历自我评
2015/03/11 职场文书
开天辟地观后感
2015/06/09 职场文书
2016年优秀团支部事迹材料
2016/02/26 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技