2014-11-04 26 views
9

Tôi đã gặp phải một số hành vi không mong muốn khi cố gắng tạo chức năng tải xuống tệp trên máy chủ NodeJS của tôi. Tôi có API REST (express) để gọi một số chức năng dữ liệu xuất, tạo ra tệp CSV trên máy chủ và sử dụng res.download('path/to/file') để kích hoạt tải xuống. Các tiêu đề phản hồi bao gồmNội dung-Bố trí: tệp đính kèm không kích hoạt hộp thoại tải xuống

Content-Disposition:attachment; filename="indicators.csv" 
Content-Length:30125 
Content-Type:text/csv; charset=UTF-8 

vì vậy mọi thứ dường như theo thứ tự.

Vấn đề là tôi nhận được phản hồi từ máy chủ dưới dạng văn bản thuần túy. Phản hồi có tất cả dữ liệu mà tệp CSV chứa, nhưng không kích hoạt hộp thoại tải xuống tệp của trình duyệt như tôi dự định. Tôi đã thử cả trên Chrome và FF. Vấn đề vẫn tồn tại trong cả hai.

Bất kỳ ý tưởng nào?

Cập nhật

tôi quản lý để làm cho nó hoạt động bằng cách tạo ra một hình thức giả, và sử dụng trình hành động của mình để thực hiện cuộc gọi AJAX của tôi. Nhưng đó là một hack xấu xí, và tôi vẫn đang tìm kiếm một giải pháp thanh lịch hơn.

Trả lời

11

Tiêu đề không phải là vấn đề. Vấn đề là bạn đang truy vấn url tải xuống thông qua cuộc gọi ajax, cuộc gọi này sẽ không gọi hộp thoại tải xuống trình duyệt. Các tùy chọn của bạn đun sôi xuống các mục sau:

  1. Sử dụng biểu mẫu được gửi đến url tải xuống của bạn. Thay vì có một hình thức có thể nhìn thấy một người sử dụng có thể tương tác với, tạo ra một hình thức với JavaScript và trình lập trình bằng cách gọi form.submit - Handle file download from ajax post

  2. Point window.location để url download. Bạn có thể làm điều này trong cửa sổ hiện hành - download file using an ajax request, hoặc trong một cái mới - res.download() not working in my case

+0

Như bạn có thể thấy trong câu hỏi của tôi, tùy chọn 1 là những gì tôi đã sử dụng. Nhưng tôi phải thừa nhận rằng lựa chọn 2 có thể là một giải pháp thanh lịch hơn trong trường hợp của tôi. – yarons

0

Bạn có thể thử sử dụng một content-type khác nhau, do đó sẽ không được mở như một tập tin văn bản trên trình duyệt:

Content-Type:application/ms-excel; charset=UTF-8 

Một lựa chọn khác có thể được sử dụng application/octet-stream như kịch câm -loại để xác định nó dưới dạng tệp có thể tải xuống mà không có mô tả tốt hơn.

Content-Type:application/octet-stream; charset=UTF-8 
+0

Đã thử điều này. Không hoạt động – yarons

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