Asp.Net在上传之前检查文件大小

scr*_*789 14 asp.net file-upload

我想使用asp fileupload组件上传文件之前检查所选的文件大小.我无法使用activex,因为解决方案必须适用于每个浏览器(firefox,Chrome等).

我怎样才能做到这一点 ?

谢谢你的回答..

krl*_*zlx 17

ASPX

<asp:CustomValidator ID="customValidatorUpload" runat="server" ErrorMessage="" ControlToValidate="fileUpload" ClientValidationFunction="setUploadButtonState();" />
<asp:Button ID="button_fileUpload" runat="server" Text="Upload File" OnClick="button_fileUpload_Click" Enabled="false" />
<asp:Label ID="lbl_uploadMessage" runat="server" Text="" />
Run Code Online (Sandbox Code Playgroud)

jQuery的

function setUploadButtonState() {

   var maxFileSize = 4194304; // 4MB -> 4 * 1024 * 1024
   var fileUpload = $('#fileUpload');

   if (fileUpload.val() == '') {
    return false;
   }
   else {
      if (fileUpload[0].files[0].size < maxFileSize) {
         $('#button_fileUpload').prop('disabled', false);
         return true;
      }else{
         $('#lbl_uploadMessage').text('File too big !')
         return false;
      }
   }
}
Run Code Online (Sandbox Code Playgroud)


Sol*_*ake 5

如果您预期的上传文件是图像,我也有同样的情况,并找到了一个可行的解决方案。简而言之,我更新了 ASP.NET FileUpload 控件以调用 JavaScript 函数来显示所选文件的缩略图,然后在调用表单提交之前检查图像以检查文件大小。废话说得够多了,让我们来看看代码吧。

Javascript,包含在页眉中

function ShowThumbnail() {
    var aspFileUpload = document.getElementById("FileUpload1");
    var errorLabel = document.getElementById("ErrorLabel");
    var img = document.getElementById("imgUploadThumbnail");

    var fileName = aspFileUpload.value;
    var ext = fileName.substr(fileName.lastIndexOf('.') + 1).toLowerCase();
    if (ext == "jpeg" || ext == "jpg" || ext == "png") {
        img.src = fileName;
    }
    else {
        img.src = "../Images/blank.gif";
        errorLabel.innerHTML = "Invalid image file, must select a *.jpeg, *.jpg, or *.png file.";
    }
    img.focus();
}

function CheckImageSize() {
    var aspFileUpload = document.getElementById("FileUpload1");
    var errorLabel = document.getElementById("ErrorLabel");
    var img = document.getElementById("imgUploadThumbnail");

    var fileName = aspFileUpload.value;
    var ext = fileName.substr(fileName.lastIndexOf('.') + 1).toLowerCase();
    if (!(ext == "jpeg" || ext == "jpg" || ext == "png")) {
        errorLabel.innerHTML = "Invalid image file, must select a *.jpeg, *.jpg, or *.png file.";
        return false;
    }
    if (img.fileSize == -1) {
        errorLabel.innerHTML = "Couldn't load image file size.  Please try to save again.";
        return false;
    }
    else if (img.fileSize <= 3145728) {  
         errorLabel.innerHTML = "";
        return true;
    }
    else {
        var fileSize = (img.fileSize / 1048576);
        errorLabel.innerHTML = "File is too large, must select file under 3 Mb. File  Size: " + fileSize.toFixed(1) + " Mb";
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

CheckImageSize 正在查找小于 3 Mb (3145728) 的文件,请将其更新为您需要的任何值。

ASP HTML 代码

<!-- Insert into existing ASP page -->
<div style="float: right; width: 100px; height: 100px;"><img id="imgUploadThumbnail" alt="Uploaded Thumbnail" src="../Images/blank.gif" style="width: 100px; height: 100px" /></div>
<asp:FileUpload ID="FileUpload1" runat="server" onchange="Javascript: ShowThumbnail();"/>
<br />
<asp:Label ID="ErrorLabel" runat="server" Text=""></asp:Label>
<br />

<asp:Button ID="SaveButton" runat="server" Text="Save" OnClick="SaveButton_Click" Width="70px" OnClientClick="Javascript: return CheckImageSize()" />
Run Code Online (Sandbox Code Playgroud)

请注意,浏览器确实需要一秒钟的时间来使用缩略图更新页面,如果用户能够在加载图像之前单击“保存”,则文件大小将得到 -1,并显示错误以再次单击“保存”。如果您不想显示图像,可以使图像控件不可见,这应该可以工作。您还需要获取空白.gif 的副本,以便页面加载时不会出现损坏的图像链接。

希望您发现此内容快速、简单且有帮助。我不确定是否有类似的 HTML 控件可仅用于一般文件。