Javascript:在重定向之间持久化文件上载
由于这个问题没有答案: 我正在研究一种变通方法,允许用户在浏览其他页面时,在一个单独的弹出窗口中上载文件。这是我将我的Javascript:在重定向之间持久化文件上载,javascript,Javascript,由于这个问题没有答案: 我正在研究一种变通方法,允许用户在浏览其他页面时,在一个单独的弹出窗口中上载文件。这是我将我的文件对象传递到弹出窗口的方式: index.html: <ol id="chosenFilesList"></ol> <a href="javascript:void(0);" id="browseButton" style="cursor: pointer;">Select files</a> <br> <br
文件
对象传递到弹出窗口的方式:
index.html:
<ol id="chosenFilesList"></ol>
<a href="javascript:void(0);" id="browseButton" style="cursor: pointer;">Select files</a>
<br>
<br>
<br>
<a href="javascript:void(0);" id="uploadButton">Upload</a>
<script src="resumable.js"></script>
<script>
var fileArr = [];
function displaySelectedFiles() {
var fileList = '';
for (var i = 0; i < fileArr.length; i++)
if(fileArr[i])
fileList += '<li>' + fileArr[i].name + '</li><a style="cursor: pointer;" onclick="removeFile(' + fileArr[i] + ');">Remove</a>';
//localStorage.setItem('fileArr', fileArr);
document.getElementById('chosenFilesList').innerHTML = fileList;
}
var r = new Resumable({
target:'test.html'
});
r.assignBrowse(document.getElementById('browseButton'));
r.on('fileSuccess', function(file){
console.debug('fileSuccess',file);
});
r.on('fileProgress', function(file){
console.debug('fileProgress', file);
});
r.on('fileAdded', function(file, event){
//r.upload();
fileArr.push(file.file);
displaySelectedFiles();
console.debug('fileAdded', event);
});
r.on('filesAdded', function(array){
//r.upload();
displaySelectedFiles();
console.debug('filesAdded', array);
});
r.on('fileRetry', function(file){
console.debug(file);
});
r.on('fileError', function(file, message){
console.debug('fileError', file, message);
});
r.on('uploadStart', function(){
console.debug('uploadStart');
});
r.on('complete', function(){
console.debug('complete');
});
r.on('progress', function(){
console.debug('progress');
});
r.on('error', function(message, file){
console.debug('error', message, file);
});
r.on('pause', function(){
console.debug('pause');
});
r.on('cancel', function(){
console.debug('cancel');
});
var popupWindow;
var addFiles = function() {
for (var i = 0; i < fileArr.length; i++) {
if(fileArr[i])
popupWindow.r.addFile(fileArr[i]);
}
//popupWindow.startUpload();
window.location.reload();
setTimeout('popupWindow.focus()', 1);
};
document.getElementById('uploadButton').addEventListener('click', function(evt) {
popupWindow = window.windowPop('', 900, 500);
if(popupWindow.location.href.indexOf('test.html') === -1) {
popupWindow.location.href = 'test.html';
setTimeout(function(){
popupWindow.onload = addFiles;
addFiles();
}, 300);
} else {
addFiles();
}
});
function windowPop(url, width, height) {
var leftPosition, topPosition;
//Allow for borders.
leftPosition = (window.screen.width / 2) - ((width / 2) + 10);
//Allow for title and status bars.
topPosition = (window.screen.height / 2) - ((height / 2) + 50);
//Open the window.
return window.open(url, "Window2", "status=no,height=" + height + ",width=" + width + ",resizable=yes,left=" + leftPosition + ",top=" + topPosition + ",screenX=" + leftPosition + ",screenY=" + topPosition + ",toolbar=no,menubar=no,scrollbars=no,location=no,directories=no");
}
</script>
<!DOCTYPE html>
<html>
<head>
<title>Resumable.js - Multiple simultaneous, stable and resumable uploads via the HTML5 File API</title>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<div id="frame">
<h3>Demo</h3>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="resumable.js"></script>
<div class="resumable-error">
Your browser, unfortunately, is not supported by Resumable.js. The library requires support for <a href="http://www.w3.org/TR/FileAPI/">the HTML5 File API</a> along with <a href="http://www.w3.org/TR/FileAPI/#normalization-of-params">file slicing</a>.
</div>
<div class="resumable-drop" ondragenter="jQuery(this).addClass('resumable-dragover');" ondragend="jQuery(this).removeClass('resumable-dragover');" ondrop="jQuery(this).removeClass('resumable-dragover');">
Drop video files here to upload or <a class="resumable-browse"><u>select from your computer</u></a>
</div>
<div class="resumable-progress">
<table>
<tr>
<td width="100%"><div class="progress-container"><div class="progress-bar"></div></div></td>
<td class="progress-text" nowrap="nowrap"></td>
<td class="progress-pause" nowrap="nowrap">
<a href="#" onclick="r.upload(); return(false);" class="progress-resume-link"><img src="resume.png" title="Resume upload" /></a>
<a href="#" onclick="r.pause(); return(false);" class="progress-pause-link"><img src="pause.png" title="Pause upload" /></a>
</td>
</tr>
</table>
</div>
<ul class="resumable-list"></ul>
<script>
var r = new Resumable({
target:'/java-example/upload',
chunkSize:1*1024*1024,
simultaneousUploads:4,
testChunks: true,
throttleProgressCallbacks:1,
method: "octet"
});
// Resumable.js isn't supported, fall back on a different method
if(!r.support) {
$('.resumable-error').show();
} else {
// Show a place for dropping/selecting files
$('.resumable-drop').show();
r.assignDrop($('.resumable-drop')[0]);
r.assignBrowse($('.resumable-browse')[0]);
// Handle file add event
r.on('fileAdded', function(file){
// Show progress pabr
$('.resumable-progress, .resumable-list').show();
// Show pause, hide resume
$('.resumable-progress .progress-resume-link').hide();
$('.resumable-progress .progress-pause-link').show();
// Add the file to the list
$('.resumable-list').append('<li class="resumable-file-'+file.uniqueIdentifier+'">Uploading <span class="resumable-file-name"></span> <span class="resumable-file-progress"></span>');
$('.resumable-file-'+file.uniqueIdentifier+' .resumable-file-name').html(file.fileName);
// Actually start the upload
r.upload();
console.log(file);
});
r.on('pause', function(){
// Show resume, hide pause
$('.resumable-progress .progress-resume-link').show();
$('.resumable-progress .progress-pause-link').hide();
});
r.on('complete', function(){
// Hide pause/resume when the upload has completed
$('.resumable-progress .progress-resume-link, .resumable-progress .progress-pause-link').hide();
});
r.on('fileSuccess', function(file,message){
// Reflect that the file upload has completed
$('.resumable-file-'+file.uniqueIdentifier+' .resumable-file-progress').html('(completed)');
});
r.on('fileError', function(file, message){
// Reflect that the file upload has resulted in error
$('.resumable-file-'+file.uniqueIdentifier+' .resumable-file-progress').html('(file could not be uploaded: '+message+')');
});
r.on('fileProgress', function(file){
// Handle progress for both the file and the overall upload
$('.resumable-file-'+file.uniqueIdentifier+' .resumable-file-progress').html(Math.floor(file.progress()*100) + '%');
$('.progress-bar').css({width:Math.floor(r.progress()*100) + '%'});
});
}
</script>
</div>
</body>
</html>
var fileArr=[];
函数displaySelectedFiles(){
var fileList='';
对于(变量i=0;i'+fileArr[i].name+'以及。
将视频文件放到此处以上载或删除
var r=新的可恢复性({
目标:'/java示例/upload',
chunkSize:1*1024*1024,
同时上传:4,
测试块:是的,
throttleProgressCallbacks:1,
方法:“八隅体”
});
//Resumable.js不受支持,请使用其他方法
如果(!r.support){
$('.resubable error').show();
}否则{
//显示放置/选择文件的位置
$('.resumable drop').show();
r、 分配下降($('可恢复下降')[0]);
r、 assignBrowse($('.resubable browse')[0]);
//处理文件添加事件
r、 打开('fileAdded',函数(文件){
//显示进度pabr
$('.resubable progress,.resubable list').show();
//显示暂停,隐藏恢复
$('.resumable progress.progress resume link').hide();
$('.resubable progress.progress pause link').show();
//将文件添加到列表中
$('.resumable list').append('upload');
$('.resumable file-'+file.uniqueIdentifier+'.resumable file name').html(file.fileName);
//实际开始上传
r、 上传();
console.log(文件);
});
r、 on('pause',function(){
//显示简历,隐藏暂停
$('.resumable progress.progress resume link').show();
$('.resubable progress.progress pause link').hide();
});
r、 on('complete',function(){
//上载完成时隐藏暂停/恢复
$('.resumable progress.progress resume链接、.resumable progress.progress pause链接').hide();
});
r、 on('fileSuccess',函数(文件、消息){
//反映文件上载已完成
$('.resumable file-'+file.uniqueIdentifier+'.resumable file progress').html('(已完成)');
});
r、 on('fileError',函数(文件、消息){
//反映文件上载已导致错误
$('.resubable file-'+file.uniqueIdentifier+'.resubable file progress').html('(无法上载文件:'+message+'));
});
r、 on('fileProgress',函数(文件){
//处理文件和整体上载的进度
$('.resumable file-'+file.uniqueIdentifier+'.resumable file progress').html(Math.floor(file.progress()*100)+'%');
$('.progress bar').css({width:Math.floor(r.progress()*100)+'%');
});
}
我刚刚添加/修改了示例HTML文件。
我只是从文件选择器中获取所有文件对象,并使用resumable.js将它们上传到一个单独的窗口中(我认为库在这里并不重要)。它在Chrome和Firefox上运行完美
这种方法的问题是,在IE 11-中(据我测试),一旦用户被重定向到另一个页面,文件上传就会停止
有谁能告诉我如何让它在所有浏览器中都工作(希望使用纯javascript)
另外,如果我能在浏览器重启之间保持上传,这将非常有帮助