2010-10-10 28 views
20

Tôi đang sử dụng Java Jersey để triển khai dịch vụ REST. Một điều mà dịch vụ của tôi phải cung cấp là tùy chọn tải xuống tệp. Các tệp này khá lớn và được xây dựng từ dữ liệu từ db.Trả lại tệp bằng Java Jersey

Hiện nay tôi đang lấy tất cả dữ liệu từ db và lưu nó vào một tập tin và trả về một

Response.ok().entity(new FileInputStream(file)).build(); 

Có cách nào làm thế nào tôi có thể bắt đầu phục vụ các tập tin mà không cần tải đầy đủ các dữ liệu từ db, nhưng khi dữ liệu đến từ db nối nó vào luồng đầu ra?

+0

Xem http://stackoverflow.com/questions/3496209/input-and-output-binary-streams-using-jersey, đây là câu trả lời hữu ích cho việc này. – centic

Trả lời

0

Vì vậy, bạn muốn nhận luồng từ cơ sở dữ liệu của mình?

Tôi không chắc chắn rằng nó thậm chí có thể.

Nhưng bạn không phải ghi tệp tạm thời để gửi dữ liệu của mình. Thay vì viết vào tập tin, bạn có thể sử dụng một ByteArrayInputStream và đặt dữ liệu của bạn ở đó với một mảng byte.

+0

Có, tôi muốn một cái gì đó như InputStream mới (new MyDBWrapper()) nơi MyDBWrapper sẽ thực hiện tìm nạp và định dạng dữ liệu. Tôi không chắc chắn tôi có thể sử dụng ByteInputStream vì dữ liệu khá lớn - có thể nhận được nhiều hơn 1 GB. – digy

0

tùy thuộc vào loại kết nối cơ sở dữ liệu/trình điều khiển, nếu bạn có quyền truy cập vào lớp JDBC (ví dụ như sử dụng Hibernate), bạn có thể truyền dữ liệu bằng API truyền trực tuyến JDBC, sau đó lấy Luồng từ ResultSet và chúng vào Trình xây dựng phản ứng của Jersey. tôi đã không làm điều này bản thân mình mặc dù ..

check here:

7

Cách khoảng

File fileToSend = getFile(); 
return Response.ok(fileToSend, "application/zip").build(); 

Loại phương tiện có thể được đặt để khớp với tệp đang được gửi.

Điều này có vẻ khá thẳng về phía trước nhưng quan trọng hơn, các chuyên gia java có đọc vấn đề hiệu suất này với giải pháp không?

+0

Bạn có thực sự thử điều này không? Tôi hy vọng rằng điều này sẽ chỉ trả về tên tập tin như chuỗi, không phải là nội dung của tập tin ... – centic

+0

Có điều này làm việc cho tôi. – nishantkyal

+0

Nó không cho tôi, nó thực sự trả về fileName. –

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