nodejs實現文件上傳

前段時間在做個人項目的時候,用到了nodejs服務端上傳文件,現在回頭把這個小結一下,作為記錄。

本人上傳文件時是基于express的multiparty,當然也可以使用connect-multiparty中間件實現,但官方似乎不推薦使用connect-multiparty中間件。廢話不多說,下面看代碼吧。

步驟:

(1)使用express創建項目,默認使用的是jade模板引擎,但是還是習慣于html,所以就改為html模板。
(2)在項目目錄中,通過npm install multiparty進行安裝必要組件。
(3)修改views/index.html,添加一個文件上傳的form。

index.html<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>上傳文件</title>
</head>
<body>上傳文件<form method='post', action='/file/uploading', enctype='multipart/form-data'><input type="file" name="inputFile"><input type="submit" value="上傳"></form>
</body>
</html>

(4)修改routes/index.js,實現上傳頁面和上傳響應的后臺代碼。

var express = require('express');
var router = express.Router();
var multiparty = require('multiparty');
var util = require('util');
var fs = require('fs');/* 上傳頁面. */
router.get('/', function(req, res, next) {//res.render('./views/index');res.sendfile('./views/index.html'); 
});/* 上傳 */
router.post('/file/uploading', function(req, res, next) {/* 生成multiparty對象,并配置上傳目標路徑 */var form = new multiparty.Form();/* 設置編輯 */form.encoding = 'utf-8';//設置文件存儲路勁form.uploadDir = './public/files';//設置文件大小限制form.maxFilesSize = 2 * 1024 * 1024;// form.maxFields = 1000;   //設置所有文件的大小總和//上傳后處理form.parse(req, function(err, fields, files) {var filesTemp = JSON.stringify(files, null, 2);if(err) {console.log('parse error:' + err);}else {console.log('parse files:' + filesTemp);var inputFile = files.inputFile[0];var uploadedPath = inputFile.path;var dstPath = './public/files' + inputFile.originalFilename;//重命名為真實文件名fs.rename(uploadedPath, dstPath, function(err) {if(err) {console.log('rename error:' + err);}else {console.log('rename ok');}})}res.writeHead(200, {'content-type': 'text/plain;charset=utf-8'});res.write('received upload:\n\n');res.end(util.inspect({fields: fields, files: filesTemp}))})
})module.exports = router;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249667.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249667.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249667.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python騰訊語音合成

一、騰訊語音合成介紹 騰訊云語音合成技術&#xff08;TTS&#xff09;可以將任意文本轉化為語音&#xff0c;實現讓機器和應用張口說話。 騰訊TTS技術可以應用到很多場景&#xff0c;比如&#xff0c;移動APP語音播報新聞&#xff1b;智能設備語音提醒&#xff1b;依靠網上現有…

鉤子函數和回調函數的區別

一般認為&#xff0c;鉤子函數就是回調函數的一種&#xff0c;其實還是有差異的&#xff0c;差異地方就是&#xff1a;觸發的時機不同。 先說鉤子函數&#xff1a; 鉤子&#xff08;Hook&#xff09;概念源于Windows的消息處理機制&#xff0c;通過設置鉤子&#xff0c;應用程…

【bzoj4712】洪水

Portal --> bzoj4712 Description 給你一棵樹&#xff0c;節點從\(1\)到\(n\)編號&#xff0c;每個節點有一個權值&#xff0c;有若干次操作&#xff0c;操作有以下兩種&#xff1a; \((C,x,delta)\)&#xff1a;將編號為\(x\)的點的權值改為\(delta\) \((Q,x)\)&#xff1a…

[USACO]地震 (二分答案+最優比率生成樹詳解)

題面&#xff1a;[USACO 2001 OPEN]地震 題目描述&#xff1a; 一場地震把約翰家的牧場摧毀了&#xff0c; 堅強的約翰決心重建家園。 約翰已經重建了N個牧場&#xff0c;現在他希望能修建一些道路把它們連接起來。研究地形之后&#xff0c;約翰發現可供修建的道路有M條。碰巧的…

HTTP協議學習筆記

1.HTTP協議簡介 &#xff08;1&#xff09;客戶端連上web服務器后&#xff0c;若想獲得web服務器中的某個web資源&#xff0c;需遵守一定的通訊格式&#xff0c;HTTP協議用于定義客戶端與web服務器通迅的格式。 &#xff08;2&#xff09;HTTP是hypertext transfer protocol&…

defer和async的原理與區別

上一篇剛轉載了一篇有關于網站性能優化的文章&#xff0c;其中提及到了頁面的加載和渲染的過程&#xff0c;提到了defer和async的相關區別&#xff0c;但是本人在此之前并沒有深究其中的區別。 defer和async是script標簽的兩個屬性&#xff0c;用于在不阻塞頁面文檔解析的前提…

一些奇妙的線段樹操作

學過數據結構和會做題完全是兩個概念orz 各種各樣的題目都應該見識一下 簡單的目錄&#xff1a; 最大連續長度 吉司機線段樹 線段樹合并/分裂 最大連續長度問題 典型題目&#xff1a;HDU 3911 &#xff08;$Black$ $And$ $White$&#xff09; 題目大意&#xff1a;有一個長度為…

微服務實踐沙龍-上海站

微服務的概念最早由Martin Fowler與James Lewis于2014年共同提出&#xff0c;核心思想是圍繞業務能力組織服務&#xff0c;各個微服務可被獨立部署&#xff0c;服務間是松耦合的關系&#xff0c;以及數據和治理的去中心化管理。微服務能夠幫助企業應對業務復雜、頻繁更新以及團…

Spring的refresh()方法調用過程

Spring的refresh()方法調用過程 refresh()是Spring中比較核心的方法&#xff0c;Spring所有的初始化都在這個方法中完成 具體代碼如下 public void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// Prepare this co…

Web數據存儲之localStorage和sessionStorage

Web數據存儲之localStorage和sessionStorage 學習前端以來&#xff0c;自己了解有localStorage和sessionStorage的相關存儲的知識&#xff0c;也有實踐過&#xff0c;但是之前只限于能用的基礎上&#xff0c;但最近看了一本書&#xff0c;深入了解了localStorage和sessionStor…

(四)RabbitMQ消息隊列-服務詳細配置與日常監控管理

&#xff08;四&#xff09;RabbitMQ消息隊列-服務詳細配置與日常監控管理 原文:&#xff08;四&#xff09;RabbitMQ消息隊列-服務詳細配置與日常監控管理RabbitMQ服務管理 啟動服務&#xff1a;rabbitmq-server -detached【 /usr/local/rabbitmq/sbin/rabbitmq-server -deta…

oracle中delete、truncate、drop的區別 (轉載)

一、delete 1、delete是DML&#xff0c;執行delete操作時&#xff0c;每次從表中刪除一行&#xff0c;并且同時將該行的的刪除操作記錄在redo和undo表空間中以便進行回滾&#xff08;rollback&#xff09;和重做操作&#xff0c;但要注意表空間要足夠大&#xff0c;需要手動提交…

前端開發工程化探討--基礎篇(長文)

轉載自UC資深前端工程師張云龍的github 喂喂喂&#xff0c;那個切圖的&#xff0c;把頁面寫好就發給研發工程師套模板吧。 你好&#xff0c;切圖仔。 不知道你的團隊如何定義前端開發&#xff0c;據我所知&#xff0c;時至今日仍然有很多團隊會把前端開發歸類為產品或者設計崗…

Python讀取Json字典寫入Excel表格的方法

需求&#xff1a; 因需要將一json文件中大量的信息填入一固定格式的Excel表格&#xff0c;單純的復制粘貼肯定也能完成&#xff0c;但是想偷懶一下&#xff0c;于是借助Python解決問題。 環境&#xff1a; Windows7 Python2.7 Xlwt 具體分析&#xff1a; 原始文件為json列表&am…

Spring-BeanFactory源碼分析

正式進入Spring 源碼分析這個模塊了&#xff0c;對于spring這個龐大的工程&#xff0c;如果要一點點的完全分析是非常困難的&#xff0c;對于應用型框架&#xff0c;我還是偏向于掌握思想或者設計&#xff0c;而不是記住代碼&#xff0c;對于初次看spring源碼&#xff0c;相信大…

Linux查看修改時間、時區

同步網絡時間 yum install ntpntpdate time.nist.gov timedatectl set-timezone Asia/Shanghai如果上面time.nist.gov服務器同步不了&#xff0c;可以換下面幾個時間服務器試試&#xff1a;time.nist.govtime.nuri.net0.asia.pool.ntp.org1.asia.pool.ntp.org2.asia.pool.ntp.o…

我所知道的HTTP和HTTPS

摘要&#xff1a;相比之前的傳輸協議&#xff0c;HTTP/2在底層方面做了很多優化。有安全、省時、簡化開發、更好的適應復雜頁面、提供緩存利用率等優勢&#xff0c;阿里云早在去年發布的CDN6.0服務就已正式支持HTTP/2&#xff0c;訪問速度最高可提升68%。 寫在前面 超文本傳輸…

sql server常用性能計數器

https://blog.csdn.net/kk185800961/article/details/52462913?utm_sourceblogxgwz5 https://blog.csdn.net/kk185800961/article/details/27657239 以下部分轉自&#xff1a;http://www.cnblogs.com/zhijianliutang/p/4174697.html 常規計數器 收集操作系統服務器的服務器性能…

Python中正反斜杠('/'和'\')的意義

剛剛在學習些測試報告的時候&#xff0c;出現一個路徑的問題&#xff0c;找了很久的原因&#xff0c;竟然是少了一個反斜杠引起的&#xff0c;在此順便記錄一下正反斜杠的作用。 在Python中&#xff0c;記錄路徑時有以下幾種寫法&#xff0c;如&#xff1a;&#xff08;大家都知…