2012-01-11 19 views
13

Tôi đang xem sử dụng NodeJS để hoạt động như máy chủ để tạo API.Sử dụng NodeJS để tải tệp lên trong cuộc gọi API

Lý tưởng nhất là tôi muốn có điểm cuối API để gửi tập hợp thông tin cũng như tệp có thể được lưu vào hệ thống tệp.

Hầu hết các ví dụ tôi thấy là gửi tệp qua biểu mẫu, tuy nhiên tôi muốn thực hiện việc này thông qua yêu cầu đăng bài.

Có ai biết cách tôi có thể đạt được điều này (nếu có thể)?

Tại thời điểm những gì tôi muốn đạt được là một cái gì đó dọc theo dòng sau đây:

app.post('/Some/Endpoint/', controller.handleSomeEndpoint, function(request, response) { 
    response.send('Finished Request'); 
}); 

exports.handleSomeEndpoint = function(request, response, next) { 
    var bodyarr = [] 
    request.on('data', function(chunk){ 
     bodyarr.push(chunk); 
    }) 
    request.on('end', function(){ 
     console.log(bodyarr.join('')); 
    }) 
} 

Nhưng các dữ liệu và kết thúc không bao giờ được gọi là nếu tôi chạy một lệnh curl dọc theo dòng:

curl http://127.0.0.1:5000/Some/Endpoint/ -F '[email protected]_file' 

Chúc mừng, Matt

+1

Biểu mẫu là yêu cầu POST khi gửi tệp. Phía nút của sự vật không phải là bất kỳ khác nhau. – Paul

+1

Nhưng làm cách nào để tạo req.files mà không có biểu mẫu? Ví dụ nào? –

Trả lời

4

Câu trả lời có vẻ là expressJS không sử dụng cùng một phương pháp xử lý tệp bài như mô-đun http trong nút.

Tất cả những gì là cần thiết bị bao gồm một thư mục cho các tập tin được ghi vào:

app.use(express.bodyParser({uploadDir:'./uploads'})); 

Mà tôi tìm thấy ở đây:

http://www.hacksparrow.com/handle-file-uploads-in-express-node-js.html

+0

Bằng cách này bất cứ lúc nào tôi gửi cho bạn một tập tin thông qua một yêu cầu POST, bạn sẽ chấp nhận nó và lưu trong ./uploads của bạn. Tôi không nghĩ nó an toàn. – nick

+0

Tôi không nghĩ rằng nó không an toàn theo nghĩa là lưu trữ tạm thời, không phải là vĩnh viễn có nghĩa là trong khi nó được chấp nhận, nó không có nghĩa là nó được lưu trữ vĩnh viễn hoặc sử dụng. Yêu cầu phải được xác thực (trong trường hợp của tôi). –

+0

Nhưng làm thế nào để vượt qua req.files nếu không có biểu mẫu nào được sử dụng? Tôi đang cố tải tệp lên chỉ qua API. –

0

Mã của bạn sẽ hoạt động tốt; đó là cách sử dụng curl sai. Hãy thử thay vào đó:

$ curl -X POST --data-binary @test_file http://localhost:8080 
+0

điều này thực sự làm hỏng tập tin ... – Devenv

2

tôi sẽ đề nghị bạn sử dụng Formidable để tránh tải lên tệp ẩn danh.

Các vấn đề liên quan