nodejs實現文件的上傳功能


1.服務端接收文件

// app.js

// 在 app.js 中加載我們寫好的處理文件上傳的模塊
var upload = require('./routes/upload');

// 允許跨域訪問  使用的是cors解決跨域問題,當我們再本地直接請求該接口的時候,可以直接請求
app.all('*', function(req, res, next) {  
    res.header("Access-Control-Allow-Origin", "*");  
    res.header("Access-Control-Allow-Headers", "X-Requested-With");  
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");  
    res.header("X-Powered-By",' 3.2.1')  
    res.header("Content-Type", "application/json;charset=utf-8");  
    next();  
});

app.use('/upload', upload);

2.上傳文件代碼

// upload.js

var express = require('express');
var router = express.Router();

var fs = require('fs');
var multer  = require('multer');

// 使用硬盤存儲模式設置存放接收到的文件的路徑以及文件名
var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        // 接收到文件后輸出的保存路徑(若不存在則需要創建)
        cb(null, 'upload/');    
    },
    filename: function (req, file, cb) {
        // 將保存文件名設置為 時間戳 + 文件原始名,比如 151342376785-123.jpg
        cb(null, Date.now() + "-" + file.originalname);  
    }
});

// 創建文件夾  使用此代碼就是為了讓我們查找磁盤中是否有該文件夾,如果沒有,可以自動創建,而不是我們提前手動創建好。如果不使用此代碼,則我們再使用該文件夾之前,需要手動創建好當前問價夾
var createFolder = function(folder){
    try{
        // 測試 path 指定的文件或目錄的用戶權限,我們用來檢測文件是否存在
        // 如果文件路徑不存在將會拋出錯誤"no such file or directory"
        fs.accessSync(folder); 
    }catch(e){
        // 文件夾不存在,以同步的方式創建文件目錄。
        fs.mkdirSync(folder);
    }  
};

var uploadFolder = './upload/';
createFolder(uploadFolder);

// 創建 multer 對象
var upload = multer({ storage: storage });

/* POST upload listing. */
router.post('/', upload.single('file'), function(req, res, next) {
    var file = req.file;
    console.log('文件類型:%s', file.mimetype);
    console.log('原始文件名:%s', file.originalname);
    console.log('文件大小:%s', file.size);
    console.log('文件保存路徑:%s', file.path);
    // 接收文件成功后返回數據給前端
    res.json({res_code: '0'});
});

// 導出模塊(在 app.js 中引入)
module.exports = router;

注意:使用如下代碼的目的是:

//DiskStorage磁盤存儲引擎可以讓你控制文件的存儲

var storage = multer.diskStorage({
   destination: function (req, file, cb) {
       cb(null, 'upload/');    
   },
   filename: function (req, file, cb) {
       cb(null, Date.now() + "-" + file.originalname);  
   }
});

var upload = multer({ storage: storage });

測試接口文件:

<form action="http://localhost:3000/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="logo" />
    <input type="submit" value="提交">    
</form>

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM