Egg.js 中 AJax 上傳文件獲取參數(shù)的方法
依賴
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;
總結(jié)
以上所述是小編給大家介紹的Egg.js 中 AJax 上傳文件獲取參數(shù),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Nodejs環(huán)境Eggjs加簽驗(yàn)簽示例代碼
- 關(guān)于自定義Egg.js的請(qǐng)求級(jí)別日志詳解
- egg.js的基本使用和調(diào)用數(shù)據(jù)庫(kù)的方法示例
- KOA+egg.js集成kafka消息隊(duì)列的示例
- vue+egg+jwt實(shí)現(xiàn)登錄驗(yàn)證的示例代碼
- React+EggJs實(shí)現(xiàn)斷點(diǎn)續(xù)傳的示例代碼
- 使用egg.js實(shí)現(xiàn)手機(jī)、驗(yàn)證碼注冊(cè)的項(xiàng)目實(shí)踐
- 為何從eggjs升級(jí)到midwayjs的原因詳解
- egg.js的基本使用實(shí)例
- Egg框架的功能、原理,以及基本使用方法概述
相關(guān)文章
利用javascript的面向?qū)ο蟮奶匦詫?shí)現(xiàn)限制試用期
Javascript是一種面向?qū)ο蟮哪_本語(yǔ)言,其也具有面向?qū)ο蟮娜筇匦?,但是今天我們不詳?xì)的講解javascript的面向?qū)ο筇匦裕裉煳覀兒?jiǎn)單的了解一下javascript的面向?qū)ο筇匦?,然后學(xué)習(xí)一下怎樣實(shí)現(xiàn)試用期的限制!2011-08-08
Electron實(shí)現(xiàn)多標(biāo)簽頁(yè)模式詳解
Electron 都發(fā)展這么多年了,讓人想不到的是,要實(shí)現(xiàn)一個(gè)多標(biāo)簽頁(yè)的功能居然沒(méi)有能用的輪子,本文就來(lái)用比較low的方案 - iframe手搓一個(gè)吧2024-11-11
JS實(shí)現(xiàn)兩表格里數(shù)據(jù)來(lái)回轉(zhuǎn)移的方法
這篇文章主要介紹了JS實(shí)現(xiàn)兩表格里數(shù)據(jù)來(lái)回轉(zhuǎn)移的方法,涉及javascript鼠標(biāo)事件及頁(yè)面元素的相關(guān)操作技巧,需要的朋友可以參考下2015-05-05
JavaScript判斷頁(yè)面是否滾動(dòng)到底部的技巧
在 JavaScript 中,我們可以通過(guò)一些技巧來(lái)判斷頁(yè)面是否滾動(dòng)到底部,本文將介紹一些常用的方法,幫助你在項(xiàng)目中實(shí)現(xiàn)這一功能,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
JavaScript中數(shù)組flat方法的使用與實(shí)現(xiàn)方法
在Array的顯示原型下有一個(gè)flat方法,可以將多維數(shù)組,降維,傳的參數(shù)是多少就降多少維,下面這篇文章主要給大家介紹了關(guān)于JavaScript中數(shù)組flat方法的使用與實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2022-08-08
Javascript下的urlencode編碼解碼方法附decodeURIComponent
而本文,就大概說(shuō)說(shuō)如何在js中通過(guò)系統(tǒng)自帶的函數(shù)去解決這個(gè)問(wèn)題。2010-04-04

