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 相关文章推荐
用Javascript实现Sleep暂停功能代码
Sep 03 Javascript
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
Sep 29 Javascript
jquery遍历数组与筛选数组的方法
Nov 05 Javascript
利用Jquery队列实现根据输入数量显示的动画
Sep 01 Javascript
用js写的一个路由(简单实例)
Sep 24 Javascript
JS控制HTML元素的显示和隐藏的两种方法
Sep 27 Javascript
纯JS打造网页中checkbox和radio的美化效果
Oct 13 Javascript
如何使用Vuex+Vue.js构建单页应用
Oct 27 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
Oct 17 Javascript
解决vue页面DOM操作不生效的问题
Mar 17 Javascript
vue异步axios获取的数据渲染到页面的方法
Aug 09 Javascript
vue-router命名视图的使用讲解
Jan 19 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
《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
我的论坛源代码(六)
2006/10/09 PHP
Yii调试SQL的常用方法
2014/07/09 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
仿新浪微博返回顶部的jquery实现代码
2012/10/01 Javascript
在JS中如何调用JSP中的变量
2014/01/22 Javascript
jquery中one()方法的用法实例
2015/01/16 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
js仿京东轮播效果 选项卡套选项卡使用
2017/01/12 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
python获取各操作系统硬件信息的方法
2015/06/03 Python
Python命令启动Web服务器实例详解
2017/02/23 Python
Python从Excel中读取日期一列的方法
2018/11/28 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
pytorch多GPU并行运算的实现
2019/09/27 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
资产经营总监岗位职责范文
2013/12/01 职场文书
咖啡蛋糕店创业计划书
2014/01/28 职场文书
护理学应聘自荐书范文
2014/02/05 职场文书
槐乡的孩子教学反思
2014/04/27 职场文书
党委班子对照检查材料
2014/08/19 职场文书
员工团队活动方案
2014/08/28 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
欠条格式范本
2015/07/03 职场文书
Pygame Event事件模块的详细示例
2021/11/17 Python
JavaScript中document.activeELement焦点元素介绍
2021/11/27 Javascript