koa 上傳文件

上傳文件

遇到的問(wèn)題:

最開(kāi)始用koa-multer询一,接口沒(méi)問(wèn)題回調(diào)執(zhí)行了求冷,但是文件沒(méi)有傳上去侠草。
折騰了兩天,發(fā)現(xiàn)注釋掉 app.use(koabody()) 就可以上傳了(這個(gè)問(wèn)題不知道有沒(méi)有人遇到過(guò)置吓,可能是我寫(xiě)的有問(wèn)題无虚,如果知道是什么問(wèn)題請(qǐng)給我留言),但是不用koa-body沒(méi)辦法接收post請(qǐng)求衍锚。
查了一下資料發(fā)現(xiàn)只用 koa-body 就可以完成需求友题, 并不需要其他中間件。

koa-body兩種上傳文件的方法

1戴质、koa-body自帶的方法

這種方法接口都不用寫(xiě)度宦,你沒(méi)看錯(cuò),不用寫(xiě)接口告匠,如果前端不在意是否有返回?cái)?shù)據(jù)的話(huà)

const koabody = require("koa-body");
app.use(koabody({
?"multipart": true, ?? ????//接收f(shuō)orm表單數(shù)據(jù)
?formidable: {
??uploadDir: './', ?? ??????//文件保存路徑
??keepExtensions: true, ????//保持源文件的擴(kuò)展
??onFileBegin: (name, file) => { ??//文件保存之前的預(yù)處理
???file.path = file.name; ?? ??//保存文件名改為源文件的文件名戈抄,否則文件名隨機(jī)
??}
?}
}));

當(dāng)然也可以寫(xiě)個(gè)接口,并不影響文件保存后专,可以同時(shí)進(jìn)行其他操作划鸽。

2、從post接口中讀取文件并保存

由于我在上傳圖片的url里帶了一個(gè)id,要根據(jù)不同的id存到不同的文件夾下裸诽,所以如果用第一個(gè)方法需要在接口回調(diào)里讀文件嫂用,然后復(fù)制到相應(yīng)的文件夾下,再刪除這個(gè)臨時(shí)文件丈冬,非常麻煩嘱函,可以用這個(gè)方法直接存到相應(yīng)的文件夾下

app.use(koabody({"multipart": true}));??//這個(gè)還是要的

寫(xiě)一個(gè)post接口用來(lái)接收上傳文件的數(shù)據(jù),然后讓我們來(lái)看一下 ctx.request.body image.png]
image.png

里邊的files對(duì)象就是傳上來(lái)的文件埂蕊,是一個(gè)集合往弓,可以多文件同時(shí)上傳,接下來(lái)要把數(shù)據(jù)還原成文件寫(xiě)到磁盤(pán):

const fs = require("fs");
const path = require('path');

exports.upload = (ctx) => {
?function witeFile(file){
??const filePath = path.join(tmpdir, file.name);
??const reader = fs.createReadStream(file.path);
??const writer = fs.createWriteStream(filePath);
??reader.pipe(writer);
??filePaths.push(filePath);
?}
?let id = ctx.url.split('id=')[1];
?let tutorialsPath = `${carTutorialsPath}/${id}`;??//這里是自定義的路徑
?if (!fs.existsSync (tutorialsPath)) {
??fs.mkdirSync (tutorialsPath);
?}
?const tmpdir = path.join(tutorialsPath);
?const filePaths = [];
?const files = ctx.request.body.files || {};
?const params = ctx.request.body.fields
?for (let key in files) {
??const file = files[key];
??if(Object.prototype.toString.call(file) == '[object Array]'){
???for(var j = 0; j < file.length; j++ ){
????witeFile(file[j]);
???}
??}else{
???witeFile(file);
??}
?}
?return true;
}

在post函數(shù)中調(diào)用粒梦,把ctx直接傳進(jìn)來(lái)就可以了

這里是fs官方api:http://nodejs.cn/api/fs.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市荸实,隨后出現(xiàn)的幾起案子匀们,更是在濱河造成了極大的恐慌,老刑警劉巖准给,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泄朴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡露氮,警方通過(guò)查閱死者的電腦和手機(jī)祖灰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)畔规,“玉大人局扶,你說(shuō)我怎么就攤上這事∪ǎ” “怎么了三妈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)莫绣。 經(jīng)常有香客問(wèn)我畴蒲,道長(zhǎng),這世上最難降的妖魔是什么对室? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任模燥,我火速辦了婚禮,結(jié)果婚禮上掩宜,老公的妹妹穿的比我還像新娘蔫骂。我一直安慰自己,他們只是感情好牺汤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布纠吴。 她就那樣靜靜地躺著,像睡著了一般慧瘤。 火紅的嫁衣襯著肌膚如雪戴已。 梳的紋絲不亂的頭發(fā)上固该,一...
    開(kāi)封第一講書(shū)人閱讀 50,096評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音糖儡,去河邊找鬼伐坏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛握联,可吹牛的內(nèi)容都是我干的桦沉。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼金闽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼纯露!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起代芜,我...
    開(kāi)封第一講書(shū)人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤埠褪,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后挤庇,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體钞速,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年嫡秕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了渴语。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昆咽,死狀恐怖驾凶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掷酗,我是刑警寧澤狭郑,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站汇在,受9級(jí)特大地震影響翰萨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜糕殉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一亩鬼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阿蝶,春花似錦雳锋、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春辛蚊,著一層夾襖步出監(jiān)牢的瞬間粤蝎,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工袋马, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留初澎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓虑凛,卻偏偏與公主長(zhǎng)得像碑宴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子桑谍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 一延柠、基本用法 1.1 架設(shè) HTTP 服務(wù) // demos/01.jsconst Koa = require('...
    majun00閱讀 1,354評(píng)論 0 5
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 2,694評(píng)論 0 3
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)锣披,斷路器贞间,智...
    卡卡羅2017閱讀 134,639評(píng)論 18 139
  • 懂你 那個(gè)雨后的黃昏, 你以一池新荷盛晶瑩的雨露敬我盈罐, 我以一縷清風(fēng)挽翠綠的柳煙回你榜跌, 你純潔無(wú)瑕闪唆, 我飄逸無(wú)方盅粪。...
    不語(yǔ)不問(wèn)閱讀 227評(píng)論 6 7
  • -01- 晚飯以后,帶著孩子溜達(dá)散步悄蕾,剛出了家門(mén)就看見(jiàn)小區(qū)路中央一群人在圍觀一輛白色轎車(chē)旁邊票顾。好奇心的趨使下,我也...
    清堯2017閱讀 432評(píng)論 2 1