]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/window/UploadToStorage.js
3c35020a73fc45b3823a0c3043d66e96cd1a8ab0
1 Ext
.define('PVE.window.UploadToStorage', {
2 extend
: 'Ext.window.Window',
3 alias
: 'widget.pveStorageUpload',
9 initComponent: function() {
13 throw "no node name specified";
16 throw "no storage ID specified";
19 let baseurl
= `/nodes/${me.nodename}/storage/${me.storage}/upload`;
21 let pbar
= Ext
.create('Ext.ProgressBar', {
26 let acceptedExtensions
= {
28 vztmpl
: ".tar.gz, .tar.xz",
31 let defaultContent
= me
.contents
[0] || '';
33 let fileField
= Ext
.create('Ext.form.field.File', {
35 buttonText
: gettext('Select File...'),
37 setAccept: function(content
) {
38 let acceptString
= acceptedExtensions
[content
] || '';
39 this.fileInputEl
.set({
44 afterrender: function(cmp
) {
45 cmp
.setAccept(defaultContent
);
50 me
.formPanel
= Ext
.create('Ext.form.Panel', {
62 xtype
: 'pveContentTypeSelector',
64 fieldLabel
: gettext('Content'),
66 value
: defaultContent
,
69 change: function(cmp
, newValue
, oldValue
) {
70 fileField
.setAccept(newValue
);
79 let form
= me
.formPanel
.getForm();
81 let doStandardSubmit = function() {
83 url
: "/api2/htmljs" + baseurl
,
84 waitMsg
: gettext('Uploading file...'),
85 success: function(f
, action
) {
88 failure: function(f
, action
) {
89 var msg
= PVE
.Utils
.extractFormActionError(action
);
90 Ext
.Msg
.alert(gettext('Error'), msg
);
95 let updateProgress = function(per
, bytes
) {
96 var text
= (per
* 100).toFixed(2) + '%';
98 text
+= " (" + Proxmox
.Utils
.format_size(bytes
) + ')';
100 pbar
.updateProgress(per
, text
);
103 let abortBtn
= Ext
.create('Ext.Button', {
104 text
: gettext('Abort'),
106 handler: function() {
111 let submitBtn
= Ext
.create('Ext.Button', {
112 text
: gettext('Upload'),
114 handler: function(button
) {
123 button
.setDisabled(true);
124 abortBtn
.setDisabled(false);
126 var field
= form
.findField('content');
127 fd
.append("content", field
.getValue());
128 field
.setDisabled(true);
130 field
= form
.findField('filename');
131 var file
= field
.fileInputEl
.dom
;
132 fd
.append("filename", file
.files
[0]);
133 field
.setDisabled(true);
135 pbar
.setVisible(true);
138 let xhr
= new XMLHttpRequest();
141 xhr
.addEventListener("load", function(e
) {
142 if (xhr
.status
=== 200) {
146 let err
= Ext
.htmlEncode(xhr
.statusText
);
147 let msg
= `${gettext('Error')} ${xhr.status.toString()}: ${err}`;
148 if (xhr
.responseText
!== "") {
149 let result
= Ext
.decode(xhr
.responseText
);
150 result
.message
= msg
;
151 msg
= Proxmox
.Utils
.extractRequestError(result
, true);
153 Ext
.Msg
.alert(gettext('Error'), msg
, btn
=> me
.close());
156 xhr
.addEventListener("error", function(e
) {
157 let err
= e
.target
.status
.toString();
158 let msg
= `Error '${err}' occurred while receiving the document.`;
159 Ext
.Msg
.alert(gettext('Error'), msg
, btn
=> me
.close());
162 xhr
.upload
.addEventListener("progress", function(evt
) {
163 if (evt
.lengthComputable
) {
164 let percentComplete
= evt
.loaded
/ evt
.total
;
165 updateProgress(percentComplete
, evt
.loaded
);
169 xhr
.open("POST", `/api2/json${baseurl}`, true);
174 form
.on('validitychange', (f
, valid
) => submitBtn
.setDisabled(!valid
));
177 title
: gettext('Upload'),
179 buttons
: [abortBtn
, submitBtn
],