2012-08-01 20 views
5

Tôi đang phát triển một ứng dụng, trong đó mọi người sẽ tải xuống tệp được yêu cầu từ một vị trí được đề cập trong DB cho Địa phương của họ. Tôi đang sử dụng struts 2 để tải xuống tệp từ máy chủ. Tôi có thể tải xuống tệp mà không có bất kỳ ngoại lệ nào và nó hoạt động hoàn hảo. Nhưng các tệp đang tải xuống có tên tệp i được chỉ định trong struts.xml, tôi muốn nó là tên tệp chính xác đang tải xuống. Ví dụ, nếu tên tập tin gốc là struts.pdf, tôi đang tải nó như download.pdf, làm thế nào để ngăn chặn nó và tải về các tập tin với tên tập tin thực tếTải xuống Struts 2 - Cách định cấu hình tên tệp động?

cấu hình struts.xml của tôi như sau,

<action name="download" class="action.DownloadAction"> 
     <result name="success" type="stream"> 
      <param name="contentType">application/octet-stream</param> 
      <param name="inputName">fileInputStream</param> 
      <param name="contentDisposition">attachment;filename="download.log"</param> 
      <param name="bufferSize">1024</param> 
     </result> 
     <result name="error">/live/useradminerror.jsp</result> 
    </action> 

Và tôi quên đề cập đến đang sử dụng struts2-jquery để phát triển giao diện người dùng .Xin vui lòng giúp tôi trong điều này, như đang ở giai đoạn rất quan trọng của dự án của tôi.

Trả lời

11

NẾU tôi chính xác bạn muốn vượt qua các tập tin đang được lưu trữ trong DB của bạn, nếu đây là trường hợp bạn có thể dễ dàng làm điều này bằng cách đi qua tất cả những thông số từ bạn lớp hành động như

class MyFileDownloadAction extends ActionSupport{ 

    private String fileName; 
    // getter and setter 

    public String fileDownload() throws exception{ 
     // file download logic 
     fileName ="abc" // can set name dynamic from DB 
    } 

} 

<action name="download" class="action.DownloadAction"> 
     <result name="success" type="stream"> 
      <param name="contentType">application/octet-stream</param> 
      <param name="inputName">fileInputStream</param> 
      <param name="contentDisposition">attachment;filename="${filename}"</param> 
      <param name="bufferSize">1024</param> 
     </result> 
     <result name="error">/live/useradminerror.jsp</result> 
    </action> 

Bạn có thể vượt qua từng tham số động trong lớp struts.xml của bạn.Hy vọng điều này sẽ giúp bạn Đây là cách bạn sẽ sử dụng tên tệp này trong XML

+0

Cảm ơn bạn đã phản hồi, nó sẽ tải xuống chính xác tên giống như trong cơ sở dữ liệu. – Esh

+1

vâng, vì trong trường hợp này, bạn đang chuyển tên tệp vào thời gian chạy từ lớp hành động của bạn –

+0

Cảm ơn bạn Umesh, tôi có thể tải tệp xuống với tên tệp thực tế – Esh

1

Đối với các chú thích trong thanh chống, giống nhau. Giải pháp rất hữu ích. Cảm ơn bạn. "ContentType" cho tôi không tạo ra nhiều khác biệt.

@Action(value = "/download", results = { @Result(name = "success", type = "stream", 
params= {"contentType", "application/octet-stream", "inputName","fileInputStream",  
"contentDisposition","attachment; filename=\"${fileName}\"", "bufferSize", "1024" }) 
}) 
Các vấn đề liên quan