Obtenir des données à partir de l'entrée de fichier dans JQuery

J'ai en fait une entrée de fichier et je voudrais récupérer les données Base64 du fichier.

J'ai essayé:

$('input#myInput')[0].files[0] 

Pour récupérer les données. Mais il ne fournit que le nom, la longueur, le type de contenu mais pas les données elles-mêmes.

J'ai réellement besoin de ces données pour les envoyer à Amazon S3

Je teste déjà L'API et quand j'envoie les données via un formulaire html avec le type d'encodage "multipart / form-data" cela fonctionne.

J'utilise ce plugin : http://jasny.github.com/bootstrap/javascript.html#fileupload

Et ce plugins me donne un aperçu de l'image et je récupère des données dans l'attribut src de l'aperçu de l'image. Mais quand j'envoie ces données à S3, cela ne fonctionne pas. J'ai peut-être besoin d'encoder les données comme "multipart/form-data", mais je ne sais pas pourquoi.

Existe-t-il un moyen de récupérer ces données sans utiliser de formulaire html?

93
demandé sur Brian Tompsett - 汤莱恩 2012-09-05 16:47:13

7 réponses

Vous pouvez essayer L'API FileReader quelque chose comme ceci.

<!DOCTYPE html>
<html>
<head>
<script>        
  function handleFileSelect()
  {               
    if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {
      alert('The File APIs are not fully supported in this browser.');
      return;
    }   

    input = document.getElementById('fileinput');
    if (!input) {
      alert("Um, couldn't find the fileinput element.");
    }
    else if (!input.files) {
      alert("This browser doesn't seem to support the `files` property of file inputs.");
    }
    else if (!input.files[0]) {
      alert("Please select a file before clicking 'Load'");               
    }
    else {
      file = input.files[0];
      fr = new FileReader();
      fr.onload = receivedText;
      //fr.readAsText(file);
      fr.readAsDataURL(file);
    }
  }

  function receivedText() {
    document.getElementById('editor').appendChild(document.createTextNode(fr.result));
  }           

</script>
</head>
<body>
<input type="file" id="fileinput"/>
<input type='button' id='btnLoad' value='Load' onclick='handleFileSelect();'>
<div id="editor"></div>
</body>
</html>
110
répondu Sark 2015-11-13 05:11:33

Élément de fichier D'Entrée:

<input type="file" id="fileinput" />

Obtenir le fichier:

var myFile = $('#fileinput').prop('files');
102
répondu Morilog 2013-10-30 19:42:30

J'ai créé un objet de données de formulaire et ajouté le fichier:

var form = new FormData(); 
form.append("video", $("#fileInput")[0].files[0]);

Et j'ai eu:

------WebKitFormBoundaryNczYRonipfsmaBOK
Content-Disposition: form-data; name="video"; filename="Wildlife.wmv"
Content-Type: video/x-ms-wmv

Dans les en-têtes envoyés. Je peux confirmer que cela fonctionne parce que mon fichier a été envoyé et stocké dans un dossier sur mon serveur. Si vous ne savez pas comment utiliser L'objet FormData, il y a de la documentation en ligne, mais pas beaucoup. Explination D'objet de données de formulaire par Mozilla

40
répondu mark.inman 2013-10-23 14:28:35

Html:

<input type="file" name="input-file" id="input-file">

JQuery:

var fileToUpload = $('#input-file').prop('files')[0];

Nous voulons obtenir le premier élément uniquement, car prop ('files') renvoie array.

9
répondu cerbin 2017-09-20 21:14:48

API FileReader avec jQuery, exemple simple.

( function ( $ ) {
	// Add click event handler to button
	$( '#load-file' ).click( function () {
		if ( ! window.FileReader ) {
			return alert( 'FileReader API is not supported by your browser.' );
		}
		var $i = $( '#file' ), // Put file input ID here
			input = $i[0]; // Getting the element from jQuery
		if ( input.files && input.files[0] ) {
			file = input.files[0]; // The file
			fr = new FileReader(); // FileReader instance
			fr.onload = function () {
				// Do stuff on onload, use fr.result for contents of file
				$( '#file-content' ).append( $( '<div/>' ).html( fr.result ) )
			};
			//fr.readAsText( file );
			fr.readAsDataURL( file );
		} else {
			// Handle errors here
			alert( "File not selected or browser incompatible." )
		}
	} );
} )( jQuery );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" id="file" />
<input type='button' id='load-file' value='Load'>
<div id="file-content"></div>

À lire sous forme de texte... décommentez //fr.readAsText(file); ligne et commentaire fr.readAsDataURL(file);

8
répondu shramee 2016-09-27 10:58:32

input élément, du type file

<input id="fileInput" type="file" />

Sur votre input change utilisez l'objet FileReader et lisez votre propriété input file:

$('#fileInput').on('change', function () {
    var fileReader = new FileReader();
    fileReader.onload = function () {
      var data = fileReader.result;  // data <-- in this var you have the file data in Base64 format
    };
    fileReader.readAsDataURL($('#fileInput').prop('files')[0]);
});

FileReader va charger votre fichier et dans fileReader.result vous avez les données du fichier au format Base64 (également le type de contenu du fichier (MIME), text/plain, image/jpg, etc)

6
répondu Carlos B. Flores 2018-01-17 16:08:18
 <script src="~/fileupload/fileinput.min.js"></script>
 <link href="~/fileupload/fileinput.min.css" rel="stylesheet" />

Télécharger les fichiers ci-dessus nommés fileinput ajouter le chemin i votre page d'index.

<div class="col-sm-9 col-lg-5" style="margin: 0 0 0 8px;">
<input id="uploadFile1" name="file" type="file" class="file-loading"       
 `enter code here`accept=".pdf" multiple>
</div>

<script>
        $("#uploadFile1").fileinput({
            autoReplace: true,
            maxFileCount: 5
        });
</script>
1
répondu Amit Rana 2017-05-30 23:33:19