ASP.NET:在上载之前验证文件大小(宽度和高度)

时间:2009-10-16 10:52:13

标签: c# asp.net image validation

在将图像尺寸(高度和宽度)上传到服务器之前,有没有办法验证图像尺寸(高度和宽度)?

我认为是使用Javascript,但我不知道如何。或者可能使用一些客户端asp.net验证器。

有什么建议吗?

5 个答案:

答案 0 :(得分:3)

这不能在客户端使用javascript完成。也许你会发现用flash,silverlight或类似文件编写的文件上传组件允许按类型,大小和尺寸限制上传的文件。

答案 1 :(得分:2)

您根本无法知道客户端JS中的文件大小。

可以做的是在请求到达服务器后检查文件大小,然后在预期文件大小超过某个限制时取消传输:

在上传模块的BeginRequest中:

   HttpWorkerRequest workerRequest = (HttpWorkerRequest)context.GetType().GetProperty("WorkerRequest",  BindingFlags.Instance | BindingFlags.NonPublic).GetValue(context, null);
        // Indicates if the worker request has a body

        if (workerRequest.HasEntityBody())
        {
            // Get the byte size of the form post. 
           long contentLength = long.Parse((workerRequest.GetKnownRequestHeader(HttpWorkerRequest.HeaderContentLength)));
            if (contentLength > MAX_UPLOAD_FILE_SIZE * 1024 )
                  {
                   workerRequest.CloseConnection();
                   context.Response.Redirect(SomeErrorPage);
                  }
        }

尚未对此进行测试,但理论上可能会有效

编辑:没关系,我是个白痴。我认为他的意思是检查文件大小,而不是图像大小

答案 2 :(得分:1)

我找到this Javascript snippet并在我的系统上工作(IE 7.0.6001.18000)。您应该知道并检查可能的跨浏览器问题。

var tempImage;

function showDimensions() {
    var imageName = document.forms[0].elements['myFile'].value;
    if (imageName != '') {
        imageName = 'file:///' + escape(imageName.split('\\').join('/'));
        imageName = imageName.split('%3A').join(':');

        tempImage = new Image();
        tempImage.onload = getDimensions;
        tempImage.src = imageName + '?randParam=' + new Date().getTime();
        // append a timestamp to avoid caching issues - which happen if you
        // overwrite any image with one of different dimensions, and try to
        // get the dimensions again even with cache settings to max,
        // in both ff and ie!
    }
}

function getDimensions() {
    alert(tempImage.width + ' x ' + tempImage.height);
}

答案 3 :(得分:0)

您可以使用GD来检查大小,请参阅this project以获取ASP.net包装

答案 4 :(得分:0)

你需要问自己,你真的认为这是可能的吗?

Javascript如何打开文件?它怎么读?你有一个可以读取任意数量图像格式的库吗?