node筆記 --祈粼
用formidable上傳文件
const http = require('http');
const formidable = require('formidable'); // 處理表單數(shù)據(jù)
const fs = require('fs')
const path = require('path')
const sd = require("silly-datetime");
const server = http.createServer((req, res) => {
if (req.url === '/api/upload' && req.method.toLowerCase() === 'post') {
// parse a file upload
const form = formidable({ multiples: true });
// 設置上傳文件存放的文件夾,默認為系統(tǒng)的臨時文件夾孕豹,可以使用fs.rename()來改變上傳文件的存放位置和文件名
form.uploadDir = './images'
// 表單全部加載完畢 執(zhí)行form.parse
form.parse(req, (err, fields, files) => {
// fields 表單數(shù)據(jù) fields.name fields.age fields.xxxxx
// files 里面單個文件的時候是對象,多個文件的時候是數(shù)組,名字是input標簽上name的值
// 獲取當前路徑
let oldPath = __dirname + '/' + files.multipleFiles.path
// __dirname 是當前模塊的目錄名
let now = sd.format(new Date(), 'YYYYMMDDHHmmss')
let ran = parseInt((Math.random() * 10000).toFixed(0));
let extname = path.extname(files.multipleFiles.name)
let newPath = __dirname + '/images/' + now + ran + extname
// fs.rename 異步地把 oldPath 文件重命名為 newPath 提供的路徑名亚隙。 如果 newPath 已存在料按,則覆蓋它赠法。 除了可能的異常秒啦,完成回調沒有其他參數(shù)陶舞。
fs.rename(oldPath, newPath, err => {
if (err) throw err
console.log('重命名完成')
})
res.writeHead(200, { 'content-type': 'application/json' });
res.end(JSON.stringify({ fields, files }, null, 2));
});
return;
}
// show a file upload form
res.writeHead(200, { 'content-type': 'text/html' });
res.end(`
<h2>With Node.js <code>"http"</code> module</h2>
<form action="/api/upload" enctype="multipart/form-data" method="post">
<div>Text field title: <input type="text" name="title" /></div>
<div>File: <input type="file" name="multipleFiles" multiple="multiple" /></div>
<input type="submit" value="Upload" />
</form>
`);
});
server.listen(8080, () => {
console.log('Server listening on http://localhost:8080/ ...');
});