2011-08-22 48 views
5

Tôi có biểu mẫu web cho phép người dùng tải lên tệp trong khi mở một vé trong hệ thống của chúng tôi. Quá trình tải lên được thực hiện bằng cách sử dụng "bộ công cụ kiểm soát ajax" kiểm soát asyncFileUpload.ASP.NET - Lưu trữ các tệp tạm thời

Ý tưởng là lưu tệp vào thư mục tạm thời và chỉ lưu chúng vào vị trí cố định khi người dùng nhấn nút "cam kết".

Tôi muốn có thể loại bỏ các tệp tạm thời không còn liên quan (ví dụ: người dùng rời khỏi trang mở trong một tháng mà không đăng biểu mẫu).

Cách tốt nhất để không giữ tệp tạm thời là gì. Có thể giữ các tệp trong phiên? Có thể giữ chúng ở chế độ xem?

Tôi có thể thêm một số JS vào trang với thời gian chờ và thêm một số mã chạy khi người dùng rời khỏi trang. Nhưng những ý tưởng này là giải pháp phía khách hàng. Tôi sẽ không muốn ai đó làm xáo trộn mã và để tôi rác trên hệ thống của tôi.

Bạn có ý tưởng nào khác không?

Cảm ơn, Summerbulb

+0

Bạn có ý nghĩa gì khi tạm thời ở đây? Có vị trí tạm thời trên máy chủ hoặc bạn hoàn toàn không muốn tải xuống tệp không? – Ankit

+0

@Ankit: Các tệp chỉ cần thiết nếu người dùng quyết định đăng biểu mẫu. Nếu không, chúng sẽ bị xóa. – summerbulb

Trả lời

3

Đề xuất của tôi là thêm trình xử lý On_SessionEnd vào Global.asax và xóa các tệp tạm thời khi phiên người dùng kết thúc. Bạn có thể đặt tên các tệp tạm thời gắn thêm SessionID cho chúng (hoặc thêm SessionID, bất kỳ thứ gì bạn muốn) và theo cách đó bạn sẽ chỉ xóa các tệp cho người dùng có phiên đã kết thúc. Bạn cũng có thể thêm một trình xử lý On_Application_End vào Global.asax để xóa TẤT CẢ các tệp trong thư mục temp.

7

lẽ giữ cho chúng tập tin trong phiên giao dịch?

No. Điều này sẽ không nhất thiết phải sử dụng lượng lớn bộ nhớ máy chủ và người dùng có thể ảnh hưởng xấu đến hiệu suất tổng thể của máy chủ bằng cách tải lên tệp lớn.

Có thể giữ chúng ở chế độ xem?

số này có hiệu quả có nghĩa là mỗi bài lại sẽ bao gồm upload ( tải) file một lần nữa không có lý do. Hiệu suất ứng dụng sẽ làm chậm đáng kể và cung cấp trải nghiệm người dùng kém (chưa kể ăn qua băng thông của bạn, điều này có thể khiến bạn mất tiền).


Tệp đang được lưu trữ ở vị trí tạm thời trên máy chủ, phải không? Và ứng dụng theo dõi thông tin về các tập tin trong một kho dữ liệu của một số loại (tôi giả định một cơ sở dữ liệu SQL)? Tôi khuyên bạn nên có một ứng dụng riêng biệt để xử lý việc dọn dẹp, đặc biệt là kể từ khi bạn đang nói về quy mô của một tháng.

Dịch vụ Windows hoặc ứng dụng bảng điều khiển đã lên lịch sẽ thực hiện công việc tốt. Nó có thể, trong khoảng thời gian thường xuyên, kiểm tra thư mục và cơ sở dữ liệu và, dựa trên bất kỳ quy tắc bạn cung cấp cho nó, thực hiện một số làm sạch. Thậm chí có thể sử dụng bất kỳ cơ chế nhắn tin nào có thể tồn tại trong hệ thống bán vé để thông báo cho người dùng về hành động này, thông báo cho quản trị viên, v.v.

+1

Nếu bạn có một SQL Server đằng sau tất cả, hãy xem xét một gói SSIS chạy hàng đêm. bạn có thể làm hầu như bất cứ điều gì với nó và nó là tầm thường để lên lịch. Beats có một ứng dụng khác để theo dõi. – Bill

+0

+1. dịch vụ là đúng cách để đi. Một thay thế sẽ là kiểm tra sự kiện sessionStart cho các tệp quá cũ, nhưng thời gian máy chủ cần phải xóa các tệp đó vào thời điểm đó, người dùng phải đợi trong lần truy cập đầu tiên của mình. Tôi khuyên bạn nên sử dụng một dịch vụ cho – citronas

+0

@citronas này: Thật vậy, tôi chắc chắn sẽ tránh xa bất kỳ sự kiện trang web nào về điều này. Đó là một hoạt động dựa trên thời gian như trái ngược với một hoạt động yêu cầu/đáp ứng (đó là ứng dụng web dành cho). Tôi cũng giống như đề xuất của Bill cho SSIS, tôi ít quen thuộc hơn nhiều với việc duy trì chúng. (Tôi cho rằng "có một ứng dụng khác để theo dõi" cũng là tầm thường, nhưng đó không phải là ở đây cũng không có. Điểm tổng thể của việc có một công việc theo lịch trình trên máy chủ vẫn còn.) – David

1

Bạn có thể lưu trữ tệp trong thư mục tạm thời của người dùng. Cho dù đây là một cách tiếp cận tốt trong kịch bản cụ thể của bạn, tôi không thể nói chắc chắn:

var dir = System.IO.Path.GetTempPath(); 

Đường dẫn sẽ phụ thuộc vào người dùng (Windows) hiện tại.

http://msdn.microsoft.com/en-us/library/system.io.path.gettemppath.aspx

+0

làm thế nào là có thể? bạn có nghĩa là lưu vào thư mục TEMP của máy chủ? và sau đó một lần nữa, máy chủ phải được khởi động lại trước khi thư mục tạm thời được làm sạch hoặc một cái gì đó như thế. – highwingers

0

Trên phạm bạn có thể phát hành một lệnh System.IO.File.Move().Các tệp còn lại có thể được xóa bằng ứng dụng dịch vụ hoặc bảng điều khiển nếu bạn có quyền truy cập vào máy chủ để thực hiện việc này.

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