Chúng tôi lưu trữ một loạt các tên tài liệu lạ trên máy chủ web của chúng tôi (mọi người tải lên) có các ký tự khác nhau như dấu cách, ký hiệu, v.v. Khi chúng tôi tạo liên kết đến các tài liệu này, chúng tôi cần phải thoát chúng để máy chủ có thể tra cứu tệp theo tên thô của nó trong cơ sở dữ liệu. Tuy nhiên, không có chức năng .NET nào được tích hợp sẵn sẽ hoạt động chính xác trong mọi trường hợp.Làm thế nào để bạn thoát đúng tên tài liệu trong .NET?
Lấy tài liệu Hello#There.docx
:
UrlEncode
sẽ xử lý việc này một cách chính xác:
HttpUtility.UrlEncode("Hello#There");
"Hello%23There"
Tuy nhiên, UrlEncode
sẽ không xử lý Hello There.docx
một cách chính xác:
HttpUtility.UrlEncode("Hello There.docx");
"Hello+There.docx"
Biểu tượng +
chỉ có giá trị cho thông số URL, không phải d tên tượng đài. Điều thú vị đủ, điều này thực sự hoạt động trên máy chủ web Visual Studio thử nghiệm nhưng không phải trên IIS.
Chức năng UrlPathEncode
hoạt động tốt cho các không gian:
HttpUtility.UrlPathEncode("Hello There.docx");
"Hello%20There.docx"
Tuy nhiên, nó sẽ không thoát khỏi nhân vật khác như #
nhân vật:
HttpUtility.UrlPathEncode("Hello#There.docx");
"Hello#There.docx"
liên kết này không hợp lệ như #
được hiểu như là một băm URL và thậm chí không bao giờ được vào máy chủ.
Có phương pháp tiện ích .NET nào để thoát khỏi tất cả các ký tự không phải chữ và số trong tên tài liệu không hoặc tôi có phải viết của riêng mình không?
Làm thế nào để bạn xử lý các dups nếu người dùng tải lên các tệp có cùng tên? Chẳng phải sẽ dễ dàng hơn khi tạo ra các tên (ví dụ như một guid) và lưu trữ tên thân thiện, do người dùng cung cấp trong cơ sở dữ liệu (cùng với tên tệp được tạo)? –
Bạn có lẽ cần một cái gì đó như thế này [Di chuyển nhân vật bất hợp pháp Từ Đường dẫn và tên tập tin] [1] [1]: http://stackoverflow.com/questions/146134/how-to-remove-illegal-characters -from-path-và-filenames –
@KirkWoll - Câu hỏi hay :) URL * thực sự * trông giống như '/ Documents/12345/My File.docx' - 12345 là khóa duy nhất, nhưng chúng tôi muốn IE" Lưu dưới dạng "hộp thoại để lưu tệp có cùng tên như được tải lên ban đầu. Chúng tôi cũng xác minh tên tệp khớp với khóa để ngăn mọi người chỉ đoán các tài liệu ngẫu nhiên (yea, không an toàn 100% nhưng đủ tốt) .. –