27

I have a simple html form with a single file upload input. (jsfiddle)

In the past, I have accessed the file selected by the user using input.files, however I am at a loss as to how to do this with JQuery;

Code:

$(function () {
    $("#cmdSubmit").bind("click", function () {
        var file = document.getElementById("fileInput").files[0];
        alert(file); //A

        file = $("#fileInput").val();
        alert(file); //B

        file = $("#fileInput").files[0];
        alert(file); //C

    });        
});​

Option A give me what I expect, a file object. However, option B simply gives me the name of the uploaded file, and (as far as I can tell) not the file itself.

Option C shows that files is undefined.

What is the Jquery equivalent of input.files?

Note: I have no objection to using native javascript; but given that I am using JQuery throughout the rest of this project I'd prefer to use it here as well if possible.

Mansfield
  • 14,445
  • 18
  • 76
  • 112

4 Answers4

61

You have to access the element. Try:

file = $("#fileInput")[0].files[0];
alert(file); //C

or (thank you Jack)

file = $("#fileInput").prop('files')[0];
alert(file);

Fiddle

Stefan
  • 14,826
  • 17
  • 80
  • 143
4

Try the below code

var file = $("#fileInput").get(0).files[0];
 alert(file);

Thanks

Sridhar Narasimhan
  • 2,643
  • 2
  • 17
  • 25
  • This looks correct as per: https://learn.jquery.com/using-jquery-core/faq/how-do-i-pull-a-native-dom-element-from-a-jquery-object/ The FAQ just mentions that this is slower... Why the downvote? – Andz Jul 02 '15 at 10:37
3

jQuery doesn't provide a wrapper for the Files API. So there isn't a jQuery style way to do this, at least not built into the jQuery core.

Your options:

  • stick with option A
  • wait for jQuery to include such a wrapper (they might not)
  • find an extension written by someone else (if one exists)
  • write an extension yourself
Quentin
  • 914,110
  • 126
  • 1,211
  • 1,335
0
$(function () {
    $("#cmdSubmit").bind("click", function () {
       alert(this.files);
     });        
});​
arhea
  • 454
  • 2
  • 5