Récupéré la taille d'un fichier en local

Signaler
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
-
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
-
Bonjour a tous.

J'aimerai savoir s'il est possible de récupéré la taille d'un fichier local d'une personne.
Simplement la taille.
Si c'est possible comment puis-je faire ?

Merci d'avance



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne

23 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
Bonjour,
ça dépend...
généralement si c'est pour contrôler la
taille d'un fichier à transmettre

dans le formulaire où est l'input type="file", ça suffit.
sinon, on peut récupérer "facilement" la taille d'un
fichier image : name formulaire.name input file.fileSize
et de toute manière avec FileSystemObject on obtient
ce qu'on veut... hélas uniquement avec Windows+
Internet Explorer.
plus d'infos ?
Cordialement. Bul. 
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Salut

Merci pour ta réponse.

Voici enfait se que je veux faire.
Sur mon site il est possible de poster des videos (même genre que sur code source, des tutoriaux en video)
J'ai donc pensé lors du post a faire une barre de chargement pour animer un peu l'upload.

Voici mon raisonement.
Lors du post du formulaire contenant un champ type file une popup est ouvert.
Il faudrai que juste avant je puisse récupéré la taille du fichier choisit en local (puisqu'il n'est pas encore placé sur le site).
Ensuite pourquoi pas l'envoyer en GET dans la popup.
Pendant que la formulaire est envoyé et donc que la video s'upload un setTimer s'effectue dans la popup appellant une page qui renvoi la taille uploader (ou s'il existe un moyen de ne pas apeller une page pour sa c'est encore mieux), pour sa il suffit de se servir en php de la fonction filesize(url); qui renvoi la taille du fichier.
Donc a partir de la je dispose de la taille total ainsi que la taille uploader.
Avec ceci je créer ma barre de poucentage tout simplement.

La récupération de la taille en local servirai aussi a fixé une limite en taille du post (free limite un post a 2Mo il me semble)

Voila voila

Je n'ai pas tout a fait compris se que tu me porpose...
Pourrai plus détaillé ?

Merci d'avance.



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Bonjour

J'ai trouver une source assez intéréssante :
http://www.javascriptfr.com/code.aspx?id=18981
Mais la ligne :
var fso = new ActiveXObject("Scripting.FileSystemObject");
N'a pas l'air de fonctioner.
IE me renvoi "Un composant ActiveX ne peut pas créer un objet"

Voici le code que j'ai mis :
var fso = new ActiveXObject("Scripting.FileSystemObject");
var ts = fso.GetFile(document.a_video.file.value);
var lg = ts.Size;
alert(lg)

Le code est mis dans une fonction qui est apeller lorsque l'on valide le formulaire.
Après ce code j'envoi le formulaire avec
document.a_video.submit();

As tu une idée de pourquoi la création de l'ActiveX ne marche pas ?



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
je connais assez bien cette source,
exclusif Windows + Internet Explorer
c'est le cas ?
Cordialement. Bul. 
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Oui c'est bien le cas.
Je ne comprend donc pas pourquoi sa ne marche pas.



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
J'ai essayer de trouver des informations concernant l'objet ActiveX mais je ne vois toujours pas pourquoi il ne veut pas le créer....

Tu as une solution ?



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
regarde ici :
http://blogs.developpeur.org/cyril/archive/2005/10/01/11883.aspx et
plus précisement la : http://sean.treadway.info/demo/upload



tu verras ca va te ravir et surtout c'est multi navigateur et beaucoup mieux qu'une popup ;)

<hr> Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Salut

Tout d'abord merci pour ta réponse.
J'ai compris qu'il faut utiliser une iframe ou mettre le formulaire et envoyé celui ci.
C'est possible de ne "rafraichir" que la iframe lors de l'envoi du formulaire ?
Car de ce coté je n'ai pas bien compris.
Pour la création de la barre d'upload je pense savoir comment faire la dessus.

Comme c'est en anglais j'ai pas mal de mal a traduire vu mon niveau d'anglais....
Pourai tu me décrire un peux plus comment cela se passe ?

Merci d'avance



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
J'ai pas encore chercher à reproduire le truc, j'ai juste noté le lien pour y regarder plus tard ;)

Mais d'aprés ce que j'ai compris.

l'iframe contient le champ input type="file" (c'est la que j'ai pas pigé le code quand j'ai regardé vite fait) ensuite quand tu envoie le fichier tu envoie juste l'iframe et te laisse pas mal de choses en javascript, genre une fonction beginUpload qui ferait ca (c'est plus facile à expliquer en pseudo code qu'en francais ;))

function beginUpload()
{
sendIframe();
var intervall = setInterval(function(){Ajax.request('page.aspx', $('info'))}, 1000)
}

avec la function ajax.request qui envoie une requete vers page.aspx et ecrit le résultat dans un div d'id info.

Ensuite coté serveur, lorsque l'iframe arrive avec son champ file, on peut determiner la taille du fichier, de suite on met la taille dans une variable session, ainsi que réguliérement la nombre d'octet transferé...

ensuite quand on fait la requete sur page.aspx cela nous renvoie une phrase avec le nombre d'octets transferé et le nombre d'octet total a emettre ...

Ce qui me bloque pour l'instant, c'est comment ils font pour envoyer l'iframe (rien de bien compliqué) mais surtout comment faire pour connaitre l'etat d'avancement du transfert ... et la je me suis jamais posé la question mais ca doit être marrant :d

mais déjà tu travailles avec quelle technologie ? moi je vais faire un controle faisant ca pour asp.net quand j'aurais le temps, par contre si c'est du php alors la aucune idée.


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Pour la technologie j'utilise Php ou j'insère dedan du javascript quand j'en est besoin.

Pour l'avancement du transfert il faut simplement je pense récupéré la taille total du fichier ainsi que la taille actuelle.
Après suffit de transformer sa en %age
Pour la taille d'un fichier coté server il suffit d'utiliser sa :
filesize(url);

Sinon pour l'envoi de iframe cela ne reactualise que l'iframe donc ?
Et donc envoi le fichier.
Dans ces cas la j'en reviens a la même question c'est de comment faire pour récupéré la taille du fichier.
Car avec php on ne poura avoir la taille du fichier que une fois celui ci uploader.....

Question envoyé une variable a une page puis que celle ci nous la renvoi je sais pas trop comment faire.....



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
vivi ... c'est aussi la question que je me suis posé quand j'ai vu le code, envoyer le fichier etc... rien de compliqué mais coté serveur comment connaitre le nombre d'octet recu avant la fin du transfert :p

mais la a mon avis ca depasse le cadre de javascript, donc un petit tour sur www.phpcs.com serait le bienvenu je pense ;)

selon : mir.aculo.us :


But you can use AJAX to get information on the running upload, as long as your framework has functions that give information on current uploads; and your webserver doesn’t buffer upload data.


In Ruby on Rails that works like this: If you enable the UploadProgress module, Rails stores information about the progress in the session, so while the upload is doing its thing, you can poll the server via an AJAX call and get nice status information. The Upload itself is made via a “traditional” HTML upload form to a hidden IFRAME (the helpers will do all this hard work for you transparently!).

bon c'est possible si tu utilises Ruby on Rails ;) aprés va falloir lire le code de Ruby pour voir comment ils font :p

En tout cas : bon courage ;)


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Justement avec
filesize(url);
On peut récupéré la taille actuel d'un fichier donc la taille actuel du fichier envoyé.



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
euh ? je pige plus trop la

<q>"Car avec php on ne poura avoir la taille du fichier que une fois celui ci uploader....."</q>

C'est bien la qu'est le problème ? car nous il nous faut la taille qui a déjà été envoyé, c'est comme si tu avais 2 threads, l'un pour le transfert du fichier, et un autre qui va regarder à intervalle régulier combien d'octects a été recus.

et d'aprés ce que je vois le problème est le meme en php et asp, on ne peut pas facilement savoir le nombre d'octect en cours de transfert. Donc ton problème est desormais un problème de php et plus de javascript ?


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Mon problème est javascript car au départ je voulais récupéré la taille d'un fichier en local pour aisni fixer une limite et avoir la taille total du fichier a transféré
Avec php je peux avoir la taille total mais que une fois le fichier uploader en entier
Avec la fonction filesize() on peut récupéré la taille d'un fichier meêm s'il n'est pas complet
Mais évidement que coté server donc sa sa serai pour avoir le nomrbe d'octet transféré

Conclusion il me manque juste le nombre d'octet du fichier total.

Et c'est donc la l'info qu'il me manque sur le fichier.



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
ben si tu peux recuperer la taille du fichier meme si pas complet, il suffit de mettre ca dans une variable session et faire une page qui n'affiche que ca.

en pseudo code ca donne ceci

dans la page d'upload

session("fileSize") = filesize();

ensuite tu créer une page vide (par exemple fileSize.php) et tu fais juste un

response.write(session("fileSize"))

et le seule texte de fileSize.php devra etre juste la taille du fichier !!!

ensuite un simple requete ajax sur filesize.php et le tour est jouée ;) voir : http://robloche.free.fr/javascript/tuto_xhr/tuto_xhr.html#section_04

var xhr_object = null;

if(window.XMLHttpRequest) // Firefox
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;
}

xhr_object.open("GET", "filesize.php", true);

xhr_object.onreadystatechange = function() {
if(xhr_object.readyState == 4)
{
var fileSize = xhr_object.responseText;
alert(fileSize );
}
}

xhr_object.send(null);


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Oui mais la je ne récupère que la taille du fichier lros de son upload et non pas la taille complète, non ?



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
ah ba je sais pas :d

la seule chose que je sais de php c'est <? php echo "hello world" ?> :)

Mais je ne vois pas pourquoi tu veux absolument recuperer la taille du fichier complet avant la fin ? comment tu va faire aprés pour avoir ton avancement ?

Au contraire si ca te donne la nombre d'octet déjà transferé t'aura juste à faire plusieurs requetes avec un setintervalle par exemple

var WriteProgress = function(size)
{
$('progress').innerHTML = 'vous avez envoyé ' + size;
}

var CheckProgress = function()
{
var xhr_object = null;

if(window.XMLHttpRequest) // Firefox
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;
}

xhr_object.open("GET", "filesize.php", true);

xhr_object.onreadystatechange = function() {
if(xhr_object.readyState == 4)
{
WriteProgress(fileSize );
}
}

xhr_object.send(null);

}

function sendFile()
{
submitIframe();
var time = setIntervall(CheckProgress, 1000)

}

Aprés reste à faire ca correctement pour arreter la boucle qui check l'avancement du fichier ;)


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Je ne souhaite pas simplement dire (vous avez envoyé X octet) mais faire une barre d'upload en poucentage.
Donc il faut bien que je me base sur une taille max pour dire qu'il est a 100%
Sinon sa n'affichera que le nombre d'octet envoyer mais cela n'indiquera pas combien il en reste par exemple.

Car pour la taille du fichier complet après l'upload il existe une fonction php permetant de donner la taille uploader, mais ce seulement après l'upload, moi je cherche a le récupéré avant, et donc j'avasi penser récupéré la tailel du fichier localement avec l'ur fournit dans le champs de fichier.

Enfait faire a peu près comme sur l'exemple donner.
Faire une barre d'avancement lors du transfert.

Je n'ai pas bien compris le fonctionement de la technologie Ajax.

Donc se qu'il me manque c'est bien la taille complète du fichier avant sont transfert.
Et donc c'est pour sa que j'ai pensé au javascript car celui ci s'éxécute coté client alros que php c'est coté server donc il ne poura me fournir de renseignement que du coté server et donc après l'upload.

Il y a un endroit ou télécharger l'exemple que tu m'a montrer pour que j'étudie sa ?



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
oula.

Comment veux tu faire pour afficher une barre en pourcent ?

Pour cela il te faut plusieurs choses. la taille du fichier total qui correspond à 100% et aussi le nombre d'octet transferé !!! sinon comment veux tu savoir si tu es à 10% ?

En javascript, il n'y a aucun moyen de connaitre le nombre d'octet transferé ni meme le nombre d'octet total à transferé !!!

Ajax, permet de faire des requetes via javascript, et tu peux recuperer le contenu d'une page et traiter le resultat par javascript.

C'est donc pour ca que l'exemple utilise Ajax.

dans l'exemple ils envoient le fichier, et en meme temps que l'envoie se fait il y a plein de petite requete qui permet de recuperer le nombre d'octet transferé ... à partir de la tu va pouvoir calculer un %age ...


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Je ne comprend pas comment on peut calculer un pourcentage transféré si on a pas la taille total du fichier.

En php on peut récupéré la taille tranféré donc il suffit d'apeler une page qui fera sa (avec l'objet XML)



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne