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 相关文章推荐
csdn 论坛技术区平均给分功能
Nov 07 Javascript
ExtJs 表单提交登陆实现代码
Aug 19 Javascript
基于jquery的无限级联下拉框js插件
Oct 29 Javascript
JavaScript代码复用模式实例分析
Dec 02 Javascript
IE6下opacity与JQuery的奇妙结合
Mar 01 Javascript
JavaScript事件处理程序详解
Sep 19 Javascript
利用vue + koa2 + mockjs模拟数据的方法教程
Nov 22 Javascript
javaScript日期工具类DateUtils详解
Dec 08 Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
Mar 21 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
Mar 05 Javascript
JavaScript实现指定数量的并发限制的示例代码
Mar 10 Javascript
vue穿梭框实现上下移动
Jan 29 Vue.js
轻量级富文本编辑器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用正则表达式匹配URL的简单方法
2013/11/12 PHP
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
php返回json数据函数实例
2014/10/09 PHP
php输出文字乱码的解决方法
2019/10/04 PHP
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
基于Vue制作组织架构树组件
2017/12/06 Javascript
基于vue2.x的电商图片放大镜插件的使用
2018/01/22 Javascript
jQuery插件Validation表单验证详解
2018/05/26 jQuery
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
[48:12]Secret vs Optic Supermajor 胜者组 BO3 第三场 6.4
2018/06/05 DOTA
python encode和decode的妙用
2009/09/02 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
对python中各个response的使用说明
2020/03/28 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
基于python实现图片转字符画代码实例
2020/09/04 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
财务经理岗位职责
2013/11/09 职场文书
法律进社区实施方案
2014/03/21 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
2014离婚协议书范文两篇
2014/09/15 职场文书
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
学生检讨书如何写
2014/10/30 职场文书
公司搬迁通知
2015/04/20 职场文书
Python 批量下载阴阳师网站壁纸
2021/05/19 Python
上个世纪50年代的可穿戴技术:无线电帽子
2022/02/18 无线电