2012-05-10 167 views

回答

7

您需要使用JavaScript来验证,这里是一个样本

function onSelect(e) { 
    if (e.files[0].size > 256000) { 
     alert('The file size is too large for upload'); 
     e.preventDefault(); 
     return false; 
    } 
    // Array with information about the uploaded files 
    var files = e.files; 
    var ext = $('#logo').val().split('.').pop().toLowerCase(); 
    if ($.inArray(ext, ['gif', 'jpeg', 'jpg', 'png', 'tif', 'pdf']) == -1) { 
     alert('This type of file is restricted from being uploaded due to security reasons'); 
     e.preventDefault(); 
     return false; 
    } 
    return true; 
} 

此说,文件大小不得超过256K更大,只允许GIF,JPG,JPEG,TIF,PNG和pdf。只需将256000更改为5000000,然后选择具体的文件类型

我在使用Telerik上传控件的剃须刀视图中的MVC 3中使用此功能。你也可以使用标准的上传输入,只要在选择或提交之前触发此事件

+0

+1代码不错。我喜欢类型的数组。 –

+0

Thx,我一直在使用这个代码过去的一年,它的作品就像一个魅力 –

+0

谢谢,但还有一个问题,我可以如何调用onSelect()函数?像这样:

5

Aside jQuery validation(非常好的酸的答案)你也应该做服务器验证。 下面是一些简单的例子:

VIEW:

@if (TempData["imageUploadFailure"] != null) 
{ 
    @* Here some jQuery popup for example *@ 
} 

@using (Html.BeginForm("ImageUpload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{     
    <legend>Add Image</legend> 

    <label>Image</label> 
    <input name="image" type="file" value=""/> 
    <br/> 

    <input type="submit" value="Send"/> 
} 

控制器:

public ActionResult ImageUpload() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult ImageUpload(HttpPostedFileBase image) 
{ 
    var result = ImageUtility.SaveImage("/Content/Images/", 1000000, "jpg,png", image, HttpContext.Server); 

    if (!result.Success) 
    { 
     var builder = new StringBuilder(); 
     result.Errors.ForEach(e => builder.AppendLine(e)); 

     TempData.Add("imageUploadFailure", builder.ToString()); 
    } 

    return RedirectToAction("ImageUpload"); 
} 

ImageUtility辅助类:

public static class ImageUtility 
{ 
    public static SaveImageResult SaveImage(string path, int maxSize, string allowedExtensions, HttpPostedFileBase image, HttpServerUtilityBase server) 
    { 
     var result = new SaveImageResult { Success = false }; 

     if (image == null || image.ContentLength == 0) 
     { 
      result.Errors.Add("There was problem with sending image."); 
      return result; 
     } 

     // Check image size 
     if (image.ContentLength > maxSize) 
      result.Errors.Add("Image is too big."); 

     // Check image extension 
     var extension = Path.GetExtension(image.FileName).Substring(1).ToLower(); 
     if (!allowedExtensions.Contains(extension)) 
      result.Errors.Add(string.Format("'{0}' format is not allowed.", extension)); 

     // If there are no errors save image 
     if (!result.Errors.Any()) 
     { 
      // Generate unique name for safety reasons 
      var newName = Guid.NewGuid().ToString("N") + "." + extension; 
      var serverPath = server.MapPath("~" + path + newName); 
      image.SaveAs(serverPath); 

      result.Success = true; 
     } 

     return result; 
    } 
} 

public class SaveImageResult 
{ 
    public bool Success { get; set; } 
    public List<string> Errors { get; set; } 

    public SaveImageResult() 
    { 
     Errors = new List<string>(); 
    } 
} 

您也可以修改响应格式,不同的文件重命名或添加多个文件处理功能等。

2

这只是指定要接受的文件类型:MSvisualstudio2010。

在您的视图(.cshtml):

ATTACHMENT:<input type="file" name="file" id="file" accept=".PNG,.TXT,.JPG,.BMP" /> 

只要指定你所需要的格式。