web-dev-qa-db-fra.com

ASP.NET Vérifier la taille du fichier avant de télécharger

Je veux vérifier la taille du fichier sélectionné [~ # ~ ~] avant [~ # ~] Téléchargement d'un fichier avec le composant ASP Filedupload. Je ne peux pas utiliser ActiveX car la solution doit fonctionner sur chaque navigateur (Firefox, Chrome, etc.)

Comment puis je faire ça ?

Merci pour vos réponses ..

15
scrat789

Ici, je viens sauver la journée! Désolé, j'ai 3 ans de retard mais laissez-moi rassurer tout le monde que cela est tout à fait possible et non difficile à mettre en œuvre! Il vous suffit simplement de sortir le fichier de fichiers téléchargé sur un contrôle pouvant être validé. Vous pouvez le faire avec JavaScript, qui ne nécessitera pas de potevet laid, où comme vous deviez utiliser

FileBytes.Length

vous rencontrerez un message après que l'utilisateur final a sélectionné une image. (C'est-à-dire à l'aide de l'ONCHANGE = "FILE1_ONCHANGE (Ceci);" pour accomplir cela.). Quelle que soit la manière dont vous choisissez de sortir, le développeur est à vous.

Une fois que vous avez FIXESIZE, il vous suffit de le diffuser sur A ASP Control pouvant être validé. (C'est-à-dire une zone de texte), vous pouvez utiliser une expression régulière pour une plage à valider pour votre filtrage.

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" ValidationExpression="^([1-9][0-9]{0,5}|[12][0-9]{6}|3(0[0-9]{5}|1([0-3][0-9]{4}|4([0-4][0-9]{3}|5([0-6][0-9]{2}|7([01][0-9]|2[0-8]))))))$" ErrorMessage="File is too large, must select file under 3 Mb." ControlToValidate="Textbox1" runat="server"></asp:RegularExpressionValidator>

Boom! C'est si facile. Assurez-vous d'utiliser le Visibility=Hidden sur votre ASP Control Pour être validé et non Display=None car Display=none apparaîtra sur la page (bien que vous puissiez toujours interagir avec elle à travers le DOM). Et Visibility=Hidden n'est pas visible, mais l'espace est alloué à la page.

découvrez: http://utilitymill.com/utility/regex_for_range Pour tous vos besoins de gamme de regex!

3
Oddacon

Pour valider multiple fichiers avec jQuery + asp:CustomValidator une taille jusqu'à 10 Mo

jQuery :

    function upload(sender, args) {
        args.IsValid = true;
        var maxFileSize = 10 * 1024 * 1024; // 10MB
        var CurrentSize = 0;
        var fileUpload = $("[id$='fuUpload']");
        for (var i = 0; i < fileUpload[0].files.length; i++) {
            CurrentSize = CurrentSize + fileUpload[0].files[i].size;          
        }
        args.IsValid = CurrentSize < maxFileSize;
    }

ASP :

 <asp:FileUpload runat="server" AllowMultiple="true" ID="fuUpload" />
 <asp:LinkButton runat="server" Text="Upload" OnClick="btnUpload_Click" 
      CausesValidation="true" ValidationGroup="vgFileUpload"></asp:LinkButton>
 <asp:CustomValidator ControlToValidate="fuUpload" ClientValidationFunction="upload" 
      runat="server" ErrorMessage="Error!" ValidationGroup="vgFileUpload"/>
1
Toshi

Je pense qu'il est possible d'utiliser javascript regarder ici

1
Hannoun Yassir

Je pense que vous ne pouvez pas faire ça. Votre question est similaire à celle-ci: Obtenir FileSize sans utiliser FileSystemObject dans JavaScript

La chose est que ASP.NET est une langue côté serveur afin que vous ne puissiez rien faire avant d'avoir le fichier sur le serveur.

Alors qu'est-ce qui reste est le code côté client (JavaScript, Java applets, flash?) ... Mais vous ne pouvez pas en pure JavaScript et que les autres solutions ne sont pas toujours "portables du navigateur" ou sans tout inconvénient

1
Julien N

Vous pouvez le faire en utilisant JavaScript.

Exemple:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Show File Data</title>
<style type='text/css'>
body {
    font-family: sans-serif;
}
</style>
<script type='text/javascript'>
function showFileSize() {
    var input, file;

    if (typeof window.FileReader !== 'function') {
        bodyAppend("p", "The file API isn't supported on this browser yet.");
        return;
    }

    input = document.getElementById('fileinput');
    if (!input) {
        bodyAppend("p", "Um, couldn't find the fileinput element.");
    }
    else if (!input.files) {
        bodyAppend("p", "This browser doesn't seem to support the `files` property of file inputs.");
    }
    else if (!input.files[0]) {
        bodyAppend("p", "Please select a file before clicking 'Load'");
    }
    else {
        file = input.files[0];
        bodyAppend("p", "File " + file.name + " is " + file.size + " bytes in size");
    }
}

function bodyAppend(tagName, innerHTML) {
    var Elm;

    Elm = document.createElement(tagName);
    Elm.innerHTML = innerHTML;
    document.body.appendChild(Elm);
}
</script>
</head>
<body>
<form action='#' onsubmit="return false;">
<input type='file' id='fileinput'>
<input type='button' id='btnLoad' value='Load' onclick='showFileSize();'>
</form>
</body>
</html>
1
xDeveloper

Je vous suggère d'utiliser le plugin/addon de téléchargement de fichier pour jQuery. Vous avez besoin de JQuery qui nécessite uniquement JavaScript et ce plugin: http://bluep.github.io/jquery-file-upload/

C'est un outil puissant qui a la validation de l'image, de la taille et la plupart de ce dont vous avez besoin. Vous devez également avoir une validation du côté serveur et que le côté client puisse être altéré. Ne vérifiant également que l'extension de fichier n'est pas assez bon car il peut être facilement altéré, jetez un coup d'œil à cet article: http://www.aaronstannard.com/post/2011/06/24/how- à la vérification sécurisée-et-validate-image-uploads-in-aspnet-an-aspnet-mvc.aspx

0
Arne H. Bitubekk
$(document).ready(function () {

"use strict";

//This is the CssClass of the FileUpload control
var fileUploadClass = ".attachmentFileUploader",

    //this is the CssClass of my save button
    saveButtonClass = ".saveButton",

    //this is the CssClass of the label which displays a error if any
    isTheFileSizeTooBigClass = ".isTheFileSizeTooBig";

/**
* @desc This function checks to see what size of file the user is attempting to upload.
* It will also display a error and disable/enable the "submit/save" button.
*/
function checkFileSizeBeforeServerAttemptToUpload() {

    //my max file size, more exact than 10240000
    var maxFileSize = 10485760 // 10MB -> 10000 * 1024

    //If the file upload does not exist, lets get outta this function
    if ($(fileUploadClass).val() === "") {

        //break out of this function because no FileUpload control was found
        return false;
    }
    else {

        if ($(fileUploadClass)[0].files[0].size <= maxFileSize) {

            //no errors, hide the label that holds the error
            $(isTheFileSizeTooBigClass).hide();

            //remove the disabled attribute and show the save button
            $(saveButtonClass).removeAttr("disabled");
            $(saveButtonClass).attr("enabled", "enabled");

        } else {

            //this sets the error message to a label on the page
            $(isTheFileSizeTooBigClass).text("Please upload a file less than 10MB.");

            //file size error, show the label that holds the error
            $(isTheFileSizeTooBigClass).show();

            //remove the enabled attribute and disable the save button
            $(saveButtonClass).removeAttr("enabled");
            $(saveButtonClass).attr("disabled", "disabled");
        }
    }
}

//When the file upload control changes, lets execute the function that checks the file size.
$(fileUploadClass).change(function () {

    //call our function
    checkFileSizeBeforeServerAttemptToUpload();

});

});

n'oubliez pas que vous avez probablement besoin de changer de web.config pour limiter les téléchargements de certaines tailles, car la valeur par défaut est de 4 Mo https://msdn.microsoft.com/en-us/library/e1f13641%28V=VS. 85% 29.aspx

<httpRuntime targetFramework="4.5" maxRequestLength="11264" />
0
tom reese