使用koa有一段時間了,評價是小巧精悍,只封裝了基本的如request物件和response物件到上下文中,其他功能基本上靠第三方中介軟體來實現。導致的問題是使用起來就不太方便了,比如用koa上傳檔案,網上資料有限,對於小白而言,檔案上傳操作就困難多了。
form表單【注意:enctype=」multipart/form-data」】上傳檔案時,首先會將檔案上傳到你本機的temp目錄,然後執行move_upload_file(tmpfile,newfile);然後node會不會是這樣呢?答案是確定的,上傳檔案大家都是一樣的思路。
//
var tmpath = path.join(os.tmpdir(), '1.txt');//模擬上傳到臨時目錄的檔案
//console.log(tmpath);
//var ext = ".txt";//上傳後生成檔案的字尾,一般和上傳的檔案字尾一致
//var ph = path.join('public/upload', date.parse(new date()).tostring() + ext);//生成新的上傳檔案路徑全稱
//console.log(ph);
//var stream = fs.createwritestream(ph);//建立乙個可寫流
可讀流通過管道寫入可寫流
然後分析了下上面**:
fs.createwritestream(path.join(os.tmpdir(), math.random().tostring()));
這裡建立乙個可寫的流物件,即建立乙個表單上傳後移動到新目錄的空檔案;而os.tmpdir()剛好是本機臨時目錄,上面**表示在臨時目錄下生成乙個隨機數空檔案;
part.pipe(stream);
上面的**表示將可讀流物件內容寫入到可寫的流物件,即上面生成的臨時檔案下的檔案;part是將request裡面的檔案物件解析成可讀流。
然後koa檔案上傳原理就清楚了。通過表單上傳檔案,檔案缺省會存放到本機臨時目錄下生成乙個臨時檔案。然後通過流的形式,開啟這個臨時檔案將資料寫入到乙個新位址的可寫檔案流裡面,前提是要提前建立這個空的可寫流檔案,即我們上傳目標檔案。
const koa = require('koa');
const bodyparser = require('koa-bodyparser');
const koabody = require('koa-body');
const router = require('./router');
// 輸出請求路徑,每次請求都會輸出
console.log(`process $ $...`);
await next();
});// 檔案上傳,注意書寫的位置很重要,否則無法上傳
(koabody());
// 解析請求體
(bodyparser());
// 使用路由
(router());
(3000);
console.log
總結一下的話,就是前端用form傳遞檔案,bodyparse解析出這個form,對應的字段是ctx.request.body.files.欄位名稱(eg: abc),最後通過拷貝臨時的資料檔案來達到上傳儲存的目的。
, //text型別的解析到fields中
files: //file型別的解析到files中
,_eventscount: 0,
_maxlisteners: undefined,
size: 12525,
name: 'bamboo5.png',
type: 'image/png',
hash: null,
lastmodifieddate: 2017-12-08t10:17:04.355z,
_writestream: [object] }
} }
var file = ctx.request.body.files.abc //傳輸檔案的name是abc
console.log(ctx.request.body)
var tmpath= file['path'];
var tmparr =file['name'].split('.');
var ext ='.'+tmparr[tmparr.length-1];
var newpath =path.join('./', parseint(math.random()*100) + date.parse(new
date()).tostring() + ext);
console.log(tmpath);
console.log(newpath);
var stream = fs.createwritestream(newpath);//建立乙個可寫流
fs.createreadstream(tmpath).pipe(stream);//可讀流通過管道寫入可寫流
然後就會發現專案當前目錄下面就會多出上傳的檔案了。 格 有界格 分配格
假設 l,l,preccurlyeq l,為偏序集,如果對於任意a,b l,a b a,b in l a,b l,a,b 都存在上確界和下確界,則稱 為乙個格 la ttic e lattice latti ce 顯然上確界和下確界有唯一性 上確界l b a,b l cup b l b a,b 記作...
N97的軟格和硬格
也就是n97的 軟格 和 硬格 關於硬格 按住shift 左下角刻有中字的鍵 刪除鍵 右上角 鍵 空格 最長的那個鍵 再按開機鍵,直到出現地區選項,鬆開鍵盤三個鍵 關於軟格 待機狀態下直接輸入 7370 原始密碼12345 軟格是單單恢復手機 系統所在盤的原廠時的檔案,而不對系統盤進行格式化。軟格只...
報表系統格集模型 格集表示法
格集有以下幾種表示方法 cellx 可以表示只有乙個單元格的格集,如 b3。單獨乙個單元格,也可以構成格集,即只有乙個成員的集合。cellx celly 其中cellx與celly均為單元格,該表示式表示以cellx與celly為對角點圈起的矩形區域,而且,cellx在左上角,celly在右下角。如...