2013-10-12 19 views
6

Tôi tiếp tục nhận được "Chỉ hình ảnh được phép" và tôi đã thử "tệp.PostedFile.FileName" cũng không hoạt động !!được đăng tiện ích mở rộng tệp asp.net

mã này được viết bằng một lớp riêng biệt ..

public static String UploadFile(FileUpload file, String type, out String filename) 
{ 
    String ext = System.IO.Path.GetExtension(file.FileName); 
    filename = ""; 
    if (file.PostedFile.ContentLength > 2000000) 
    { 
     return "File is larger than 2 MB"; 
    } 
    else if (type != "File") 
    { 
     if (ext.ToLower() != ".jpg" || ext.ToLower() != ".png" || ext.ToLower() != ".gif" || ext.ToLower() != ".jpeg") 
     { 
      return "Only images are allowed"; 
     } 
     else 
     { 
      filename = System.IO.Path.GetRandomFileName() + "_" + file.PostedFile.FileName; 
      String root = HttpContext.Current.Server.MapPath("~/Images/"); 
      file.SaveAs(root + type + "/" + filename); 
      return "Success"; 
     } 
    } 
    else 
    { 
     filename = System.IO.Path.GetRandomFileName() + "_" + file.PostedFile.FileName; 
     String root = HttpContext.Current.Server.MapPath("~/Files/"); 
     file.SaveAs(root + filename); 
     return "Success"; 
    } 
} 
+0

Loại fikle nào bạn đang chuyển sang phương pháp này? –

+0

Bạn không thể sử dụng File.Extention() –

Trả lời

6

tình trạng của bạn là sai, nó phải là như sau:

if (ext.ToLower() != ".jpg" && ext.ToLower() != ".png" && ext.ToLower() != ".gif" && ext.ToLower() != ".jpeg") 
{ 
return "Only images are allowed"; 
} 
else 
{ 
///statement 
} 

HOẶC

if (ext.ToLower() == ".jpg" || ext.ToLower() == ".png" || ext.ToLower() == ".gif" || ext.ToLower() == ".jpeg") 
    { 

    ///statement 
    } 
    else 
    { 
return "Only images are allowed"; 
    } 
+1

@Anas .. từ quan điểm trình biên dịch của xem, thứ hai là tốt nhất, bạn nên sử dụng điều này. – NMathur

3

tình trạng của bạn để kiểm tra gia hạn hiệu lực là một cách logic không chính xác (luôn đánh giá true). Nó phải là như thế này (|| được thay thế bằng &&):

if (ext.ToLower() != ".jpg" && ext.ToLower() != ".png" && ext.ToLower() != ".gif" && ext.ToLower() != ".jpeg") 
{ 
    return "Only images are allowed"; 
} 
4

@ câu trả lời volpav của sẽ khắc phục sự cố của bạn, nhưng if lớn không phải là cách sạch nhất để xử lý sự cố.

Thanh lịch hơn sẽ là xác định danh sách các tiện ích mở rộng được chấp nhận và kiểm tra xem liệu ext có nằm trong danh sách hay không. Những lợi thế cho điều này sẽ được rằng nó được dễ dàng hơn để duy trì nếu bạn đã bao giờ phải thay đổi các loại hợp lệ sau đó, và rằng bạn có thể làm cho phần mở rộng người dùng có thể xác định nếu đó là mong muốn.

Trong ví dụ dưới đây tôi đang xác định một hằng số (biến cũng chỉ đọc) cho các lớp học của tôi có chứa một mảng với tất cả các trường hợp ngoại lệ, và sử dụng phương pháp Contains() mở rộng để kiểm tra để xem nếu ext tồn tại bên trong nó khi xác nhận trong UploadFile

public static readonly string[] VALID_EXTENSIONS = 
    new string[4] { ".png", ".jpg", ".gif", ".jpeg" }; 

// in UploadFile ... 
    if (!VALID_EXTENSIONS.Contains(ext.ToLower())) { 
     return "Only images are allowed"; 
    } 

Bằng cách làm cho mã này tĩnh trong mã trên, tôi có thể sử dụng danh sách này trong giao diện người dùng để cho biết tiện ích ngoại lệ là gì, thay vì cho người dùng đoán loại hình ảnh hợp lệ (Có, sau khi tất cả, hình ảnh khác loại hơn những loại bạn đã bao gồm).

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