2012-02-17 32 views
17

Làm cách nào để gửi tệp trên node.js/express.Cách gửi tệp với node.js

Tôi đang sử dụng Cloudpace và muốn gửi hình ảnh/video vào bộ nhớ từ xa nhưng tôi không chắc rằng nó đơn giản như đọc tệp (fs.readFileSync()) và gửi dữ liệu trong phần yêu cầu hoặc là nó?

Tiêu đề phải là gì.

Điều gì xảy ra nếu nó là một tệp rất lớn trên một vài GB?

Có thể sử dụng superagent (http://visionmedia.github.com/superagent) cho điều này hoặc có thư viện tốt hơn để gửi tệp không?

Vui lòng cho tôi một số thông tin về điều này.

Cảm ơn!

Trả lời

5

Tôi đang sử dụng Cloudpace và muốn gửi hình ảnh/video vào bộ nhớ từ xa nhưng tôi không chắc nó đơn giản như đọc tệp (fs.readFileSync()) và gửi dữ liệu trong phần yêu cầu, hoặc là nó?

Bạn nên không bao giờ sử dụngfs.readFileSync nói chung. Khi bạn sử dụng hoặc bất kỳ phương pháp nào khác được gọi là somethingSync, bạn chặn toàn bộ máy chủ trong suốt thời gian của cuộc gọi đó. Chỉ chỉ thời gian chấp nhận được để thực hiện cuộc gọi đồng bộ trong chương trình node.js trong khi khởi động.

Tiêu đề phải là gì.

Xem RackSpace Cloud Files API.

Có thể sử dụng superagent (http://visionmedia.github.com/superagent) cho thư viện này hoặc thư viện tốt hơn để gửi tệp không?

Trong khi tôi không có bất kỳ kinh nghiệm nào với superagent, tôi chắc chắn nó sẽ hoạt động tốt. Chỉ cần đảm bảo bạn đọc tài liệu API và đưa ra yêu cầu của bạn theo đặc điểm kỹ thuật của chúng.

4

Đối với các tệp lớn, bạn sẽ muốn sử dụng khái niệm đường ống IO của node.js với nhau. Bạn muốn mở tệp cục bộ để đọc, bắt đầu yêu cầu HTTP tới rackspace và sau đó nối các sự kiện dữ liệu từ quá trình đọc tệp cho quy trình yêu cầu HTTP.

Here's an article on how to do this.

Superagent là tốt cho các tệp nhỏ, nhưng vì API superagent giả định toàn bộ yêu cầu của bạn được tải vào bộ nhớ trước khi bắt đầu yêu cầu, nó không phải là cách tốt nhất để chuyển tệp lớn.

Thông thường bạn sẽ không cần phải lo lắng cụ thể về tiêu đề yêu cầu vì thư viện yêu cầu HTTP của nút sẽ gửi tiêu đề phù hợp cho bạn. Chỉ cần đảm bảo rằng bạn sử dụng bất kỳ phương thức HTTP nào mà API của bạn yêu cầu (có thể là POST) và trông giống như đối với rackspace, bạn cũng cần phải thêm tiêu đề bổ sung X-Auth-Token với mã thông báo API của mình.

36
app.get('/img/bg.png', function(req, res) { 
    res.sendFile('public/img/background.png') 
}) 

http://expressjs.com/api.html#res.sendfile

sử dụng "res.sendFile". "res.sendfile" không được dùng nữa.

+6

res.sendfile không được dùng nữa: Sử dụng res.sendFile thay vì – NuclearPeon

+0

Nếu đường dẫn cần phải tương đối, bạn cần sử dụng var path = require ('path'); router.get ('/ GetAudio', chức năng (req, res, next) { res.sendFile (__ dirname + "/public/img/background.png"); }); – Mahesh

+0

Điểm này là gì? Nó chỉ là tạo một bí danh, nhưng bạn có thể vừa chuyển tệp đến vị trí đó – kim366

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