如何在Javascript上传中强制最近的文件内容

时间:2016-08-28 17:55:31

标签: jquery file input

我使用type =' file'的输入上传Excel文件。工作得很好。我在用户进行浏览/选择时从输入中收集文件对象,然后在以后的AJAX POST期间将其附加到FormData对象。

但是我注意到如果我在外部更新Excel文件而不再通过文件选择过程(例如$(" #input")。on(" change",function( e)......)文件的内容没有改变。

我猜这个文件实际上是在选择时加载的,而不是在我将它附加到表单数据的时候。

似乎如果我想要最新版本的文件,我必须让用户再次完成选择过程,基本上是"相同"文件。

有没有办法在不强迫用户再次完成选择过程的情况下始终获取最新版本的文件?

1 个答案:

答案 0 :(得分:0)

当我填写输入类型文件并在检查文件大小后修改内容后,它已被更改。一种解决方案是检查超时文件的大小,并在之前触发输入.change。 编辑:触发器更改不起作用,因此我将元素重新放在同一个地方,然后检查大小。     

<div id="parentForm">
  <form><input type="file" /></form>
</div>
<script src="https://code.jquery.com/jquery-2.1.0.min.js"></script>
<script>
    (function($){
        var inpt = $('input[type=file]')[0]
        var form = $('form')[0];
        var size = 0;
        var $parentForm = $('#parentForm');
        var checkSize = function(){
            var f = inpt.files[0];
            var newSize;
            if(f){
                newSize = inpt.files[0].size
                if(newSize != size){
                    $('form').trigger('sizeChanged')
                    size = newSize;
                }
            }
            setTimeout(function(){
                console.log('icheck')
                $parentForm.append(form);
                checkSize()
            },2000)
        }
        checkSize();

        //////////////////////

        $('form').on('sizeChanged',function(){
                console.log("the size has changed")
        })



    })(jQuery)    
</script>

https://jsfiddle.net/bormat/ufhhj4bd/11/