gpt4 book ai didi

javascript - 使用ajax上传多个文件

转载 作者:太空宇宙 更新时间:2023-11-04 14:24:10 25 4
gpt4 key购买 nike

我正在尝试使用 Ajax 实现多文件上传,或者至少它应该看起来像 ajax(无需重新加载页面)。下面是我的代码...

我可以使用简单的提交来完成。在上面的代码中,我可以获得所有文件的列表,删除一些文件,然后将其余文件上传到服务器。但我想像 ajax 那样用进度条来做。我不能使用文件 api,因为服务器端的 python 没有获取文件对象。任何帮助表示赞赏。

<!DOCTYPE html>

uploader

    <script type="text/javascript">
var file_array = [];
var file_name_cell,relation_cell, option_cell, sr_no_cell;
var rowId = 0;
var fileCount = 1;
var new_file_id = '';
var array_last_index = 0;


/* ----------- To add file name in the hidden field start ----------- */

function addFileName(fileId){
var file = document.getElementById(fileId);
for(var i=0; i<file.files.length; i++){
file_array.push(file.files.item(i).fileName);

}
$('#file_names').val(file_array.join('^'));
file.style.display = 'none';
createNewFileInput();
addRow();

}

/* ----------- To add file name in the hidden field end ----------- */

/* ----------- To create and display new file input start ------------ */

function createNewFileInput(){
fileCount += 1
new_file_id = 'files_' + fileCount;

var new_file_input = document.createElement('input');
new_file_input.setAttribute('type', 'file');
new_file_input.setAttribute('name', new_file_id);
new_file_input.setAttribute('id', new_file_id);
new_file_input.setAttribute('multiple', 'multiple');
new_file_input.setAttribute('onchange', 'addFileName(\'' + new_file_id + '\')');
document.getElementById('file_input_area').appendChild(new_file_input);

}

/* ----------- To create and display new file input end ------------ */

/* ----------- To add row in the table start ----------- */

function addRow(){
var table = document.getElementById('selected_files_table_body');
var last_row,
row;
for(var i=array_last_index; i<file_array.length; i++){
rowId += 1;
try{
last_row = table.rows.length;
}
catch(e){
row = table.insertRow(0);
}
row = table.insertRow(last_row);
row.id = rowId;
sr_no_cell = row.insertCell(0);
sr_no_cell.innerHTML = rowId+'.';
file_name_cell = row.insertCell(1);
file_name_cell.style.textAlign = 'left';
file_name_cell.innerHTML = file_array[i];
option_cell = row.insertCell(2);
option_cell.innerHTML = '<a href="javascript<b></b>:void(0)"><img src="/django_forms_media/icon/remove.png" onclick="removeRow(' + rowId + ',\'' + file_array[i] + '\');" border=0 /></a>&nbsp;';


}
array_last_index = file_array.length;

}

/* ----------- To add row in the table end ----------- */


/* ----------- To remove row from the table start ----------- */

function removeRow(removeRowId, file_to_remove){
var row = document.getElementById(removeRowId);
row.parentNode.removeChild(row);
removeFileName(file_to_remove);
}

/* ----------- To remove row from the table end ----------- */

/* ----------- To remove specific file name from hidden field and array start ----------- */

function removeFileName(file_to_remove){
for (var i = 0; i < file_array.length; i++) {
if (file_array[i] == file_to_remove) {
file_array.splice(i, 1);
array_last_index -= 1;
break;
}
}
$('#file_names').val(file_array.join('^'));
}

/* ----------- To remove specific file name from hidden field and array end ----------- */

/* ----------- To clear the file array and removing all rows start ----------- */

function clearAllFiles(){
file_array = [];
var table = document.getElementById("selected_files_table_body");
for (var i = table.rows.length - 1; i > 0; i--) {
table.deleteRow(i);
rowId = 0;
}
}

/* ----------- To clear the file array and removing all rows end ----------- */


</script>
</head>
<body>
<div >

<div >
<div >
<fieldset>
<legend>
Upload Package
</legend>
<form id="frm_upload_package" name="frm_upload_package" action="/djangoforms/uploadcontents/" method="post" enctype="multipart/form-data">
<div class="selectfile">
<label>
Select Files:
</label>
<br/>
</div>
<span id="file_input_area">
<input id="files_1" type="file" name="files_1" multiple = "multiple" onchange="addFileName('files_1');"/>
<input id="file_names" type="hidden" size=100 name="fileNames" />
</span>
<fieldset style="width:70%;">
<legend>Selected Files</legend>
<table id = "selected_files_table" name = "selected_files_table" style="margin-left:0" class="sortable" cellspacing="0" cellpadding="3" border="0">
<thead>
<tr>
<th>Sr.No.</th>
<th>File Name</th>
<th>Option</th>

</tr>
</thead>
<tbody id = "selected_files_table_body" name = "selected_files_table_body">
</tbody>
</table>
</fieldset>
<div class="buttonrow">
<input type="button" value="Upload" id="upload_package" name="upload_package">&nbsp;
<input type="reset" name="reset_button" id="reset_button" value="Cancel" onclick ="clearAllFiles();"/>

</div>
</form>
</fieldset>
</div>
</div>
</div>
</body>

最佳答案

您必须使用隐藏的 iframe 并在那里发送数据,无法使用 XMLHttpRequest 上传文件。此外,有许多 jQuery 插件可以完成这项工作,您可以查看它们。

关于javascript - 使用ajax上传多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4184904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com