2010-04-26 40 views
26

Tôi đang tạo ứng dụng web (ở Django), ứng dụng này cần cho phép người dùng tải lên tệp (hình ảnh cụ thể, sau này được hiển thị cho người dùng khác). Tôi đang cố gắng hiểu cách tốt nhất để lưu trữ các tệp được tải lên này.Cách tốt nhất để lưu trữ các tệp do người dùng tải lên trong webapp

Từ các câu hỏi liên quan, tôi thấy một số người đã đề xuất cung cấp cho tệp một id không hợp lệ do máy chủ tạo, sau đó tạo bảng DB ánh xạ id thành tên tệp gốc.

Đây có phải là cách tiếp cận tốt nhất để lưu trữ các tệp do người dùng tải lên, từ bảo mật, hiệu quả hoặc bất kỳ quan điểm nào khác không? Tôi nên lưu trữ loại thông tin nào về mỗi tệp?

Có bất kỳ phương pháp hay nhất nào khác có liên quan đến việc chấp nhận tệp do người dùng tải lên không? (Ngoài việc đảm bảo chúng thực sự là hình ảnh và kiểm tra kích thước của chúng, rõ ràng)?

Chỉnh sửa: Thêm một chút thông tin về những gì tôi cần. Tôi đang nói cụ thể về các tệp hình ảnh mà người dùng cần tải lên và nhúng vào nội dung mà họ tạo. Hãy tưởng tượng nó giống như một câu trả lời StackOverflow (hoặc một bài đăng trên blog): một người nào đó tải lên một hình ảnh, hình ảnh này phải được lưu trữ và hiển thị bất cứ khi nào bất kỳ ai khác nhìn thấy câu trả lời.

Cảm ơn,
Edan
Lưu ý: Có một số câu hỏi liên quan, nhưng tôi đã không tìm thấy một trong đó yêu cầu một sự so sánh cách để lưu trữ các tập tin người dùng tải lên.

+0

hi edan, tôi đến cùng một vấn đề. Tôi sẽ tạo ứng dụng nơi người dùng có thể tải lên hình ảnh/pdf. Sau đó, họ có thể xem/tải xuống tệp. Tôi đang nghĩ đến việc lưu trữ hệ thống tệp. Chỉ muốn biết bạn thích trải nghiệm nào hơn? –

+1

Hướng tôi đang lên kế hoạch là: 1. Cơ sở dữ liệu chứa thông tin "meta" (tên tệp gốc, v.v.). 2. Tệp vật lý trên hệ thống tệp, với tên là chỉ mục vào db của thông tin meta. Có thể có nhiều hơn một tập tin vật lý cho mỗi mục nhập db, bằng cách này, tương ứng với các độ phân giải khác nhau, ví dụ. Ví dụ: tôi sẽ có các tệp: 254_high_res.jpg, 254_los_res.jpg, trong đó 254 là chỉ mục trong cơ sở dữ liệu của thông tin meta cho tệp 254. –

+0

cảm ơn edan. tôi sẽ lưu trữ hình ảnh với radon guid tạo ra tên như tên tập tin. và với độ phân giải khác, tôi sẽ sử dụng trình xử lý. http://dotnetslackers.com/articles/aspnet/Generating-Image-Thumbnails-in-ASP-NET.aspx –

Trả lời

2

Đó là một câu hỏi lớn.

Liên quan đến trường hợp sử dụng ảnh của bạn, đây là miền của máy chủ ảnh thường là một phần hoàn toàn riêng biệt của ứng dụng. Họ xử lý vòng đời và thay đổi kích thước của hình ảnh (một hình ảnh được lưu trữ/thay đổi kích thước với kích thước khác nhau). Theo như tôi đã thấy như vậy chưa bao giờ được thực hiện bởi một cột BLOB từ SQL, nhưng bởi tập tin bình thường đơn giản trên đĩa.

Cũng có một cái nhìn tại một (infrastructure example from facebook)

Nói chung các sản phẩm phải gắn với yêu cầu cụ thể của bạn (tập tin có kích thước, số-file, tải). Trong hầu hết các trường hợp, bạn không muốn xây dựng mọi thứ từ đầu ... Mặc dù nếu yêu cầu của bạn thấp hơn (chỉ một vài người dùng tải lên tệp hiếm khi), bạn chỉ có thể lưu các tệp này trên đĩa và lưu đường dẫn làm tham chiếu các dữ liệu khác của bạn (ví dụ: cột trong RDBMS).

3

Câu hỏi của bạn quá rộng để thực sự hữu ích; cách tiếp cận tốt nhất sẽ phụ thuộc vào các yêu cầu cụ thể của bạn. Tuy nhiên ...

Các lập trình viên thường xuyên bị cám dỗ để ghép các tệp vào cơ sở dữ liệu. Kháng cự. Nó chỉ thêm một lớp phức tạp cho mọi thứ bạn cố gắng làm với chúng sau đó. Đối với kinh nghiệm của tôi, trong khi sử dụng một hashkey như tên tập tin địa phương là sở thích của tôi, nó không thực sự làm việc vì tập tin của chúng tôi không bị giới hạn hình ảnh: các hình ảnh không cần tên để phục vụ người dùng, và người tải lên không đặc biệt thích việc đổi tên tệp của họ vì nó khiến họ không thể biết tệp nào là gì.

Đối với hình ảnh, có một số công việc không tầm thường phải làm khi thay đổi kích thước thành các kích thước/hình thu nhỏ khác nhau.

+0

Tại sao một số người đặt các tệp trong cơ sở dữ liệu? Nó có vẻ như là một ý tưởng thực sự tồi tệ, nhưng tôi đã nghe nó gợi ý một vài lần. Liệu nó có bất kỳ upides? –

+2

Upside là khớp nối chặt chẽ giữa tệp và siêu dữ liệu của nó. –

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