2011-07-27 37 views
6

Tôi đang cố gắng tạo một trang web mà tôi cần lưu trữ một vài tệp do người dùng tải lên (như một số hình ảnh tiểu sử, một số tệp xml, v.v ...).Cách tốt nhất để lưu trữ tệp do người dùng tải lên trong một trang web là gì?

Vậy cách tốt nhất để lưu trữ những tệp đó là gì?

Hiện tại, tôi đang tạo thư mục mới trên máy chủ cho mỗi người dùng mới đã đăng ký và lưu trữ tệp cho từng người dùng trong thư mục tương ứng của họ nhưng ai đó đã nói với tôi rằng đó không phải là cách tốt nhất.

Vì vậy, làm cách nào để lưu trữ các tệp đó? Cho dù tôi tạo một thư mục chung & hãy đặt tên các tệp theo tên người dùng hoặc liên quan đến người dùng HOẶC tiếp tục tạo thư mục mới cho mọi người dùng?

+1

Họ có giải thích mối quan ngại của họ không? Mối quan tâm của tôi sẽ là nếu những người khác có quyền truy cập vào thông tin được tải lên b/c họ biết vị trí đó. Nếu thư mục được/protected/user/và thông tin chỉ có thể được truy cập thông qua một PHP có thể giải quyết mối quan tâm duy nhất của tôi. – Wayne

+0

Đó thực sự là một mối quan tâm lớn nhưng ngay bây giờ, người dùng tải lên các tập tin với ứng dụng của tôi có thể được công khai vì vậy tôi không cần phải lo lắng về những người vào lúc này. – ptamzz

Trả lời

4

Giải pháp khả thi sẽ phụ thuộc vào yêu cầu của bạn, ví dụ: bạn đang mong đợi bao nhiêu người dùng. Giải pháp một thư mục cho mỗi người dùng có thể sớm bị giới hạn một số hệ thống tệp (đối với ext3, số lượng thư mục con tối đa trong một thư mục được cố định là 32000).

Một tệp cho mỗi người dùng phải ổn trong một thời gian dài (xem: How many files in a directory is too many?).

Cuối cùng, nếu userbase của bạn phát triển, bạn có thể sử dụng số lượng phân đoạn cố định (ví dụ: dựa trên userid) để giới hạn số lượng thư mục và số lượng tệp trên mỗi thư mục (ví dụ: xem how git stores its objects in loose format).

+0

Cảm ơn. Điều đó trả lời rất nhiều điều tôi muốn trong tâm trí của tôi !! – ptamzz

1

Vâng, bạn có một vài tùy chọn.

  1. Bạn có thể lưu trữ chúng dưới dạng tệp trên hệ thống tệp, bên ngoài gốc web.
  2. Bạn có thể lưu trữ chúng dưới dạng dữ liệu nhị phân trong một RMDBS chuẩn như MySQL.
  3. Bạn có thể sử dụng cơ sở dữ liệu "NoSQL" như CouchDB hoặc Redis chuyên lưu trữ tài liệu.

Cách tốt nhất sẽ tùy thuộc vào ứng dụng, khung thời gian và trải nghiệm của bạn. Tùy chọn 1 có lẽ sẽ là dễ nhất. Tùy chọn 2 có lẽ sẽ linh hoạt nhất. Tùy chọn 3 có khả năng sẽ hoạt động tốt nhất nếu nó đáp ứng nhu cầu của tài liệu của bạn.

+2

Tôi không chắc Redis chuyên lưu trữ tài liệu - Redis chủ yếu là một kho khóa: giá trị. Khi thuật ngữ 'tài liệu' được sử dụng trong các cuộc thảo luận cơ sở dữ liệu NoSQL, mọi người thường có nghĩa là một đối tượng dữ liệu, không phải là một cái gì đó giống như một tệp XML. Sau đó, một lần nữa, tôi đã không bao giờ nghe nói về lưu trữ dữ liệu nhị phân của một tập tin trong một cơ sở dữ liệu vì vậy tôi cho rằng nó có thể. – Matt

+0

Đây là nguồn của tôi cho Redis lưu trữ tài liệu. http://images.infoworld.com/d/data-explosion/no-sql-new-databases-new-applications-400?page=0,3 Tôi sẽ thừa nhận tôi chưa từng sử dụng. Tôi đã lưu trữ các tập tin trong cơ sở dữ liệu. trong PHP bạn sử dụng một trường BLOB và sử dụng gói() để chuyển đổi chuỗi nhị phân. Tôi cũng đã sử dụng một phương pháp giống như GIT nơi tôi đã sử dụng userid, đệm nó đến 0000003450 và sau đó tạo thư mục:/00/00/00/34/50/ –

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