JQuery - 文件属性

22
尝试在选择文件后从输入字段访问文件属性。尝试了这个方法,但出现错误“未定义文件”。
var file = $("#uploadedfile").prop("files")[0];
var fileName = file.fileName;
var fileSize = file.fileSize;
alert("Uploading: "+fileName+" @ "+fileSize+"bytes");

你尝试更改属性的属性了吗? - Ricardo Binns
1
你有进行过任何调试吗?错误提示表明$("#uploadedfile").prop("files")[0];存在问题。 - maxedison
你的浏览器支持访问吗? - Daniel A. White
  1. 尝试使用attr,结果相同
  2. 我得到的唯一错误消息是“文件未定义”
  3. 我正在使用Mac Firefox 8.0.1,那么我如何检查它是否支持访问?
- JimmyJammed
5个回答

49
如果#uploadedfile是一个类型为“file”的输入框:
var file = $("#uploadedfile")[0].files[0];
var fileName = file.name;
var fileSize = file.size;
alert("Uploading: "+fileName+" @ "+fileSize+"bytes");

通常情况下,这将在change事件上触发,如下所示:

$("#uploadedfile").on("change", function(){
   var file = this.files[0],
       fileName = file.name,
       fileSize = file.size;
   alert("Uploading: "+fileName+" @ "+fileSize+"bytes");
   CustomFileHandlingFunction(file);
});

FIDDLE


仍然出现此错误: $(this).files 未定义 [在此错误上中断](超出范围4的第85行) - JimmyJammed
2
jQuery没有文件属性。尝试使用$("#uploadedfile")[0].files[0]$(this)[0].files[0]this.files[0],但是它将与问题中的代码具有完全相同的效果。我认为这只是一个浏览器支持的问题。 - Kevin B
1
@KevinB - 我添加了一个小工具,应该可以在所有浏览器中使用。 - adeneo
2
我修改了你的fiddle,使其在IE中不会抛出错误,因为我们都知道IE实现这样的酷炫功能速度很慢。 >.<。http://jsfiddle.net/Tentonaxe/eq3Qv/1/ - Kevin B
很好的发现,Kevin。我没有想到那个问题。看起来问题只是来自@JamesHickman的一个小错别字,在webkit中可以工作但在Firefox中不行。问题解决了 :-) - adeneo
显示剩余6条评论

8
<form id = "uploadForm" name = "uploadForm" enctype="multipart/form-data">
    <label for="uploadFile">Upload Your File</label>
     <input type="file" name="uploadFile" id="uploadFile">                  
</form>
<script>
    $('#uploadFile').change(function(){
        var fileName = this.files[0].name;
        var fileSize = this.files[0].size;
        var fileType = this.files[0].type;
        alert('FileName : ' + fileName + '\nFileSize : ' + fileSize + ' bytes');
    });
</script>

注意: 获取上传文件名需使用jQuery val()方法。

例如:

var fileName = $('#uploadFile').val();

在发布之前,我检查了上面的代码,它完美地工作着!


2

获取文件名,使用以下代码:

var files = document.getElementById('inputElementID').files;

使用jQuery(既然您已经在使用)可以将其调整为以下内容:
$('input[type="file"][multiple]').change(
    function(e){
        var files = this.files;
        for (i=0;i<files.length;i++){
            console.log(files[i].fileName + ' (' + files[i].fileSize + ').');
        }
        return false;
    });

JS Fiddle demo.


这在Chrome中运行得很好,但在Firefox中我得到了undefined(未定义),这只是一个浏览器支持的问题。 - Kevin B

1

只是尝试

var file = $("#uploadedfile").prop("files")[0];
var fileName = file.name;
var fileSize = file.size;
alert("Uploading: "+fileName+" @ "+fileSize+"bytes");

它对我有效


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接