2013-03-01 72 views
3

一些背景:我正在嘗試使用node.js創建一個Web服務,並表示接受帶有圖像的POST請求。使用Express.js上傳文件名的Node.js服務器

我已經能夠成功發送請求,但我希望能夠對圖像做些什麼。我見過的所有例子都是這樣做的,它使用表單上傳一個使用POST的文件,這樣做可以讓他們爲要上傳的文件命名。讓他們做以下

app.post('/upload',function(req,res) { 
    req.files.formName // have access to the file's information 
} 

我只是希望能夠創造類似REST的方式POST請求,因此該文件得到通過API調用,這樣當文件獲取上傳到服務器,快遞給它是一個隨機的名稱,訪問文件數組中文件的方式是使用實際的圖片文件名,這取決於用戶的文件名是什麼,我不能使這個常量。

app.post('/upload',function(req,res) { 
    req.files.<what goes here> 
    req.files[0] // this wont work 
} 

您的幫助表示讚賞,如果我這樣做了錯誤的方式,比如說用快遞是一個不錯的選擇,那麼請繼續和建議。我正在做這個項目來學習如何使用node.js以及它的所有優點。

回答

1

它仍然以相同的方式工作。

即使您以類似REST的方式發送POST,您仍然必須在您的api調用中命名參數。

例如,如果您已命名圖片「圖片」。

var data = {"image":imageData}; 

要訪問它仍然是

req.files.image 
+0

我用Webstorms REST客戶端,所以我想它總是選擇窗體名稱是文件名。謝謝你的提醒。 – trigoman 2013-03-02 17:22:14

0

如果你想訪問原始的HTTP體:

app.post('/upload', function(req, res) { 
    var chunks = ''; 
    req.on('data', function(data) { 
    chunks += data; 
    }); 
    req.on('end', function() { 
    console.log('received', chunks.length, 'bytes', chunks); 
    res.send(...); 
    }); 
}); 

(如果你需要使用express.bodyParser還有,請確保您app.use()設定上述路線)

0

簡單上傳你只需要這些配置:

app.use(express.static(__dirname + '/upload')); 
app.use(express.bodyParser({uploadDir:__dirname + '/upload'})); 

和玉模板:

form(method='post', action='/upload', enctype='multipart/form-data') 
    input(name='file', type='file') 
    input(type='submit') 
相關問題