使用以下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?
答案 0 :(得分:0)
什么可以蠕虫。我已经环顾四周了,我能告诉你的是,你想要做的事情并不容易。您必须解决几个问题。但是,如果你有兴趣,一个勇敢的人made a plugin available with multi-file upload(付出代价)。
主要问题是Apex无法通过AJAX处理文件上传。从插件的文档中,您可以收集一些信息:文件以块的形式处理,最后重建。在IE(和非html5浏览器(以及IE9也没有FileReader对象))中,文件通过单独的页面和iframe逐个处理。据推测,此页面有一个文件浏览项目。我相信文件也会立即上传。
另一种方式可能是through apex listener。虽然在这里你不得不想办法让它发挥作用。
但是,当您说“上传文件(最多3个)&#39;”时,这是否意味着您最多只能上传3个文件?在这种情况下,为什么不创建3个文件浏览项,然后动态显示/隐藏?避免尝试模仿多文件插件的麻烦。
如果你想要,最好的路线可能是使用额外的页面,特别是在使用IE时。
在HTML5浏览器中,您可以尝试使用javascript中的FileReader对象,读取文件并对其进行编码,然后以块的形式处理它,并通过plsql将它们放回到服务器端。有关详情,请查看Reading local files in javascript和Html5 File Upload with Progress。