2011-02-09 18 views
7

Tôi đã viết một ứng dụng web nhỏ bằng Grails. Tệp war-result được triển khai trên một máy chủ ứng dụng Tomcat.Grails và Tomcat: Nơi lưu trữ các tệp đã tải lên trong hệ thống tệp?

Ứng dụng có chức năng tải lên cho tệp đính kèm. Tôi đã chọn để lưu các tập tin được tải lên đĩa (thay vì lưu trữ các đốm màu trong DB).

Lúc đầu, tôi đã chọn một filepath bên trong webapp-dir để lưu trữ các tập tin, nhưng sau đó tôi nhận ra rằng thư mục này sẽ được ghi đè với mọi triển khai của một tập tin chiến tranh mới.

thực hành tốt nhất cho "nơi lưu trữ tệp đã tải lên trong hệ thống tệp cục bộ của bạn"?

Cảm ơn sự giúp đỡ của bạn.

+0

Nếu bạn đọc danh sách gửi thư của Grails, bạn sẽ nhận thấy rằng tôi có * cùng một câu hỏi *. Hy vọng cho một câu trả lời tốt. –

+1

Bạn vui lòng đăng một giải pháp ở đây, nếu bạn nhận được một cái gì đó hữu ích từ danh sách gửi thư? – DiegoFrings

Trả lời

1

Tôi khuyên bạn nên sử dụng biến môi trường để lưu trữ vị trí hoặc sử dụng biến môi trường để đặt vị trí của tệp thuộc tính cấu hình và đặt thuộc tính ở đó. Bằng cách đó, vị trí có thể được cấu hình bởi nhóm hoạt động, những người cần quản lý các mối quan tâm về cấu hình/hệ thống tập tin.

+0

Âm thanh can thiệp, nhưng: nhóm hoạt động có thể định cấu hình chỉ thư mục cho đường dẫn mà máy chủ ứng dụng có thể xử lý. nếu các tập tin sẽ được lưu trữ trong cho phép nói "/ tmp /" máy chủ ứng dụng sẽ không thể gửi hình ảnh này đến trình duyệt. vậy đâu là vị trí tốt đáp ứng cả hai yêu cầu: máy chủ ứng dụng có thể gửi tệp đến trình duyệt VÀ dir sẽ không bị ghi đè khi triển khai? – DiegoFrings

+0

Họ cũng nên kiểm soát cấu hình của máy chủ ứng dụng/máy chủ web. Nếu bạn cũng cần phân phát lại nội dung, hãy có thông số cấu hình khác là vị trí url vào thư mục đang được phân phối. – codelark

2

AlphaOne, chúng tôi làm điều gì đó tương tự như những gì bạn đang yêu cầu, nhưng chúng tôi sử dụng máy chủ web Apache trước Tomcat. Chúng tôi lấy đường dẫn đầy đủ từ tệp cấu hình và ghi vào nó. Nói "/ tmp/xây dựng thương hiệu". Sau đó, chúng tôi cũng chọn đường dẫn url cho vị trí này từ tệp cấu hình (nói "myapp/branding") và sử dụng nó trong GSP của chúng tôi. Sau đó, trong Apache, chúng tôi ánh xạ các yêu cầu ứng dụng cho url đó ("myapp/xây dựng thương hiệu") để đi trực tiếp đến vị trí tệp, bỏ qua Tomcat.

+1

Lời cảnh báo, nhiều hệ điều hành sẽ lọc thư mục tmp đôi khi. Nó thường được thực hiện tại thời điểm khởi động nếu một số ngày nhất định đã trôi qua. Nó có thể xuất hiện không thể đoán trước và có thể khó khăn để gỡ lỗi. –

2

Tạo dự án riêng để tải lên và chuyển tên người dùng để tạo thư mục người dùng cụ thể. Cung cấp liên kết đến dự án này từ dự án chính khi người dùng muốn tải tệp lên.

0

Tôi đoán bạn đang tìm kiếm giải pháp thực hành tốt nhất. Vâng, không thực sự có một, nhưng có một số nơi bạn nên tránh đặt chúng vào. Tôi sẽ giả định một môi trường UNIX.

Ví dụ:

  • Các $ CATALINA_HOME. Chỉ cần rời khỏi thư mục ứng dụng cho nó là gì, đừng gây ô nhiễm nó với các tệp đã tải lên.
  • /tmp. Bạn không bao giờ biết ai sẽ dọn dẹp nó.

Mặc dù tôi không chắc đó là thông số kỹ thuật bị khóa, bạn có thể xem: linux directory structure.

Con đường tôi đọc nó, bạn có 3 lựa chọn:

  1. Nếu Tomcat chạy sử dụng một người dùng chuyên dụng -> Thư mục người dùng gia đình. Ví dụ: ~/Fileuploads/appname
  2. Vì var có thể được xem như một thư mục ngày càng tăng về dữ liệu ứng dụng. Ví dụ:/var/Fileuploads/appname
  3. Để nó vào quản trị viên của sys. Hãy xem điều này: Externalizing Grails Configuration

Chúc may mắn!