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 相关文章推荐
向fckeditor编辑器插入指定代码的方法
May 25 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
Mar 30 Javascript
深入浅出理解javaScript原型链
May 09 Javascript
JQuery实现鼠标移动图片显示描述层的方法
Jun 25 Javascript
AngularJS中的Directive自定义一个表格
Jan 25 Javascript
使用Bootstrap美化按钮实例代码(demo)
Feb 03 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
Jun 09 Javascript
利用node.js实现反向代理的方法详解
Jul 24 Javascript
实例分析JS与Node.js中的事件循环
Dec 12 Javascript
基于openlayers4实现点的扩散效果
Aug 17 Javascript
angular使用md5,CryptoJS des加密的方法
Jun 03 Javascript
微信小程序错误this.setData报错及解决过程
Sep 18 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
PHP多进程编程实例
2014/10/15 PHP
PHP如何通过AJAX方式实现登录功能
2015/11/23 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
PHP实现webshell扫描文件木马的方法
2017/07/31 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
JS网页图片按比例自适应缩放实现方法
2014/01/15 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
javascript正则表达式中的replace方法详解
2015/04/20 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
BootStrap Typeahead自动补全插件实例代码
2016/08/10 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
vue select选择框数据变化监听方法
2018/08/24 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
2018/08/31 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
Python中的条件判断语句基础学习教程
2016/02/07 Python
Python for Informatics 第11章 正则表达式(一)
2016/04/21 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
python迭代器常见用法实例分析
2019/11/22 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
Python中pyecharts安装及安装失败的解决方法
2020/02/18 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
新加坡交友网站:be2新加坡
2019/04/10 全球购物
教师自我鉴定
2013/12/13 职场文书
2014年上半年工作自我评价
2014/01/18 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
公司授权委托书
2014/10/17 职场文书
房产分割协议书范文
2014/11/21 职场文书
还款承诺书范本
2015/01/20 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书
Python中Numpy和Matplotlib的基本使用指南
2021/11/02 Python