support empty files and fail on directories
This commit is contained in:
parent
7d6490cd15
commit
abc082a9c9
|
@ -26,22 +26,24 @@ export class FileUpload {
|
||||||
*
|
*
|
||||||
* @param {File|Blob} file
|
* @param {File|Blob} file
|
||||||
* @param {NavWindow} nav_window_ref
|
* @param {NavWindow} nav_window_ref
|
||||||
|
* @param {string|undefined} path_prefix
|
||||||
*/
|
*/
|
||||||
constructor(file, nav_window_ref) {
|
constructor(file, nav_window_ref, path_prefix = "") {
|
||||||
try {
|
try {
|
||||||
this.chunk_size = (parseInt(cockpit.info.version) > 238)? 1048576 : 65536;
|
this.chunk_size = (parseInt(cockpit.info.version) > 238)? 1048576 : 65536;
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
this.chunk_size = 65536;
|
this.chunk_size = 65536;
|
||||||
}
|
}
|
||||||
this.filename = file.name;
|
this.filename = path_prefix + file.name;
|
||||||
this.nav_window_ref = nav_window_ref;
|
this.nav_window_ref = nav_window_ref;
|
||||||
this.path = nav_window_ref.pwd().path_str() + "/" + file.name;
|
this.path = nav_window_ref.pwd().path_str() + "/" + this.filename;
|
||||||
this.reader = new FileReader();
|
this.reader = new FileReader();
|
||||||
this.chunks = this.slice_file(file);
|
this.chunks = this.slice_file(file);
|
||||||
this.chunk_index = 0;
|
this.chunk_index = 0;
|
||||||
this.timestamp = Date.now();
|
this.timestamp = Date.now();
|
||||||
this.modal_prompt = new ModalPrompt();
|
this.modal_prompt = new ModalPrompt();
|
||||||
|
this.using_webkit = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
check_if_exists() {
|
check_if_exists() {
|
||||||
|
@ -111,7 +113,7 @@ export class FileUpload {
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {File|Blob} file
|
* @param {File|Blob} file
|
||||||
* @returns {Array}
|
* @returns {Blob[]}
|
||||||
*/
|
*/
|
||||||
slice_file(file) {
|
slice_file(file) {
|
||||||
var offset = 0;
|
var offset = 0;
|
||||||
|
@ -137,27 +139,38 @@ export class FileUpload {
|
||||||
this.proc.done((data) => {
|
this.proc.done((data) => {
|
||||||
this.nav_window_ref.refresh();
|
this.nav_window_ref.refresh();
|
||||||
})
|
})
|
||||||
this.reader.onload = (function(uploader_ref) {
|
this.reader.onerror = (evt) => {
|
||||||
return async function(evt) {
|
this.modal_prompt.alert("Failed to read file: " + this.filename, "Upload of directories not supported.");
|
||||||
uploader_ref.write_to_file(evt, uploader_ref.chunk_index * uploader_ref.chunk_size);
|
this.done();
|
||||||
uploader_ref.chunk_index++;
|
}
|
||||||
uploader_ref.progress.value = uploader_ref.chunk_index;
|
this.reader.onload = (evt) => {
|
||||||
if (uploader_ref.chunk_index < uploader_ref.num_chunks)
|
this.write_to_file(evt, this.chunk_index * this.chunk_size);
|
||||||
uploader_ref.reader.readAsArrayBuffer(uploader_ref.chunks[uploader_ref.chunk_index]);
|
this.chunk_index++;
|
||||||
|
this.progress.value = this.chunk_index;
|
||||||
|
if (this.chunk_index < this.num_chunks)
|
||||||
|
this.reader.readAsArrayBuffer(this.chunks[this.chunk_index]);
|
||||||
else {
|
else {
|
||||||
uploader_ref.done();
|
this.done();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
})(this);
|
|
||||||
try {
|
try {
|
||||||
this.reader.readAsArrayBuffer(this.chunks[0]);
|
this.reader.readAsArrayBuffer(this.chunks[0]);
|
||||||
} catch {
|
} catch {
|
||||||
this.reader.onload = () => {};
|
this.reader.onload = () => {};
|
||||||
this.done();
|
if (this.using_webkit) {
|
||||||
|
this.proc.input(JSON.stringify({seek: 0, chunk: ""}), true);
|
||||||
|
} else {
|
||||||
this.modal_prompt.alert("Failed to read file: " + this.filename, "Upload of directories and empty files not supported.");
|
this.modal_prompt.alert("Failed to read file: " + this.filename, "Upload of directories and empty files not supported.");
|
||||||
}
|
}
|
||||||
|
this.done();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {ArrayBuffer} buffer
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
arrayBufferToBase64(buffer) {
|
arrayBufferToBase64(buffer) {
|
||||||
let binary = '';
|
let binary = '';
|
||||||
let bytes = new Uint8Array(buffer);
|
let bytes = new Uint8Array(buffer);
|
||||||
|
|
Loading…
Reference in New Issue