0

使用以下 HTML 输入和 Javascript,用户最多可以向页面添加 3 个文件。

文件上传输入代码:

    <input id="my_file_element" type="file" name="file_1" >
    <input type="submit">
Files:
<div id="files_list"></div>
<script> 
    var multi_selector = new MultiSelector( document.getElementById( 'files_list' ), 3 );
    multi_selector.addElement( document.getElementById( 'my_file_element' ) );
</script>

HTML 标头中的 JavaScript:

<script language="javascript"> 

    function MultiSelector( list_target, max ){

    this.list_target = list_target;

    this.count = 0;

    this.id = 0;

    if( max ){
        this.max = max;
    } else {
        this.max = -1;
    };

    this.addElement = function( element ){


        if( element.tagName == 'INPUT' && element.type == 'file' ){

            element.name = 'file_' + this.id++;


            element.multi_selector = this;

            element.onchange = function(){

                var new_element = document.createElement( 'input' );
                new_element.type = 'file';

                this.parentNode.insertBefore( new_element, this );

                this.multi_selector.addElement( new_element );

                this.multi_selector.addListRow( this );

                this.style.position = 'absolute';
                this.style.left = '-1000px';

            };

            if( this.max != -1 && this.count >= this.max ){
                element.disabled = true;
            };

            this.count++;

            this.current_element = element;

        } else {
            alert( 'Error: not a file input element' );
        };

    };

    this.addListRow = function( element ){


        var new_row = document.createElement( 'div' );


        var new_row_button = document.createElement( 'input' );
        new_row_button.type = 'button';
        new_row_button.value = 'Delete';

        new_row.element = element;


        new_row_button.onclick= function(){

            this.parentNode.element.parentNode.removeChild( this.parentNode.element );

            this.parentNode.parentNode.removeChild( this.parentNode );


            this.parentNode.element.multi_selector.count--;

            this.parentNode.element.multi_selector.current_element.disabled = false;

            return false;
        };

        new_row.innerHTML = element.value;

        new_row.appendChild( new_row_button );

        this.list_target.appendChild( new_row );

    };

};
    </script>

如何使用 Pl/SQL 将 blob 文件(最多 3 个)插入 Oracle DB?

4

1 回答 1

0

真是一罐蠕虫。我环顾四周,我只能告诉你,你想做的事情一点也不容易。您必须解决几个问题。但是,如果您有兴趣,一个勇敢的人提供了一个可用于多文件上传的插件(有偿)。

主要问题是 Apex 无法通过 AJAX 处理文件上传。从插件的文档中,您可以收集到一些信息:文件以块的形式处理,最后进行重建。在 IE(和非 html5 浏览器(和 IE9 也没有 FileReader 对象))中,文件通过单独的页面和 iframe 逐个处理。想必,这个页面有一个文件浏览项。我相信文件也会立即上传。

另一种方法可能是通过 apex listener。尽管在这里您必须弄清楚更多才能使其正常工作。

但是,当您说“上传文件(最多 3 个)”时,这是否意味着您最多只能上传 3 个文件?在这种情况下,为什么不创建 3 个文件浏览项,然后动态显示/隐藏它们呢?省去尝试模仿多文件插件的麻烦。

如果您确实需要,最好的方法可能是使用额外的页面,尤其是在使用 IE 时。

在 HTML5 浏览器中,您可以在 javascript 中尝试 FileReader 对象,读取文件并对其进行编码,然后将其分块处理并通过 plsql 将其重新组合到服务器端。有关这方面的更多信息,请查看Reading local files in javascriptHtml5 File Upload with Progress

于 2012-05-21T09:19:08.940 回答