Signed-off-by: Timo Grodzinski <t.grodzin...@profihost.ag> --- PVE/HTTPServer.pm | 24 +++++++++++++++++++++--- www/manager/Utils.js | 3 +++ www/manager/form/ContentTypeSelector.js | 2 +- 3 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/PVE/HTTPServer.pm b/PVE/HTTPServer.pm index a96518a..1050634 100755 --- a/PVE/HTTPServer.pm +++ b/PVE/HTTPServer.pm @@ -21,10 +21,12 @@ use AnyEvent::IO; use AnyEvent::HTTP; use Fcntl (); use Compress::Zlib; +use PVE::Cluster; use PVE::SafeSyslog; use PVE::INotify; use PVE::RPCEnvironment; use PVE::REST; +use PVE::Storage; use Net::IP; use URI; @@ -1144,10 +1146,26 @@ sub parse_content_disposition { my $tmpfile_seq_no = 0; sub get_upload_filename { + my ( $request ) = @_; + # choose unpredictable tmpfile name - $tmpfile_seq_no++; - return "/var/tmp/pveupload-" . Digest::MD5::md5_hex($tmpfile_seq_no . time() . $$); + my $file = "pveupload-" . Digest::MD5::md5_hex($tmpfile_seq_no . time() . $$); + + my $dir = '/var/tmp'; + + # other temp. storage dir for disk image uploads from datacenter.cfg (must be writable for www-data) + if ( ref $request && $request->method eq 'POST' && $request->uri =~ m|/upload_image$| ) { + my $datacenterconf = PVE::Cluster::cfs_read_file( 'datacenter.cfg' ); + if ( my $storeid = $datacenterconf->{upload_image_temp_storage} ) { + my $storageconf = PVE::Cluster::cfs_read_file( "storage.cfg" ); + my $scfg = PVE::Storage::storage_check_enabled( $storageconf, $storeid ); + die "cant upload to storage type '$scfg->{type}'\n" if !grep { $scfg->{type} eq $_ } qw( dir nfs ); + $dir = PVE::Storage::get_temp_dir( $storageconf, $storeid ); + } + } + + return "$dir/$file"; } sub unshift_read_header { @@ -1283,7 +1301,7 @@ sub unshift_read_header { print "start upload $path $ct $boundary\n" if $self->{debug}; - my $tmpfilename = get_upload_filename(); + my $tmpfilename = get_upload_filename( $r ); my $outfh = IO::File->new($tmpfilename, O_RDWR|O_CREAT|O_EXCL, 0600) || die "unable to create temporary upload file '$tmpfilename'"; diff --git a/www/manager/Utils.js b/www/manager/Utils.js index 09788cf..de4493c 100644 --- a/www/manager/Utils.js +++ b/www/manager/Utils.js @@ -740,6 +740,7 @@ Ext.define('PVE.Utils', { statics: { vztmplText: gettext('Container template'), isoImageText: gettext('ISO image'), containersText: gettext('Container'), + tempText: gettext('Temp'), format_expire: function(date) { if (!date) { @@ -807,6 +808,8 @@ Ext.define('PVE.Utils', { statics: { cta.push(PVE.Utils.isoImageText); } else if (ct === 'rootdir') { cta.push(PVE.Utils.containersText); + } else if (ct === 'temp') { + cta.push(PVE.Utils.tempText); } }); diff --git a/www/manager/form/ContentTypeSelector.js b/www/manager/form/ContentTypeSelector.js index 0c74524..1e280bf 100644 --- a/www/manager/form/ContentTypeSelector.js +++ b/www/manager/form/ContentTypeSelector.js @@ -10,7 +10,7 @@ Ext.define('PVE.form.ContentTypeSelector', { me.data = []; if (me.cts === undefined) { - me.cts = ['images', 'iso', 'vztmpl', 'backup', 'rootdir']; + me.cts = ['images', 'iso', 'vztmpl', 'backup', 'rootdir', 'temp']; } Ext.Array.each(me.cts, function(ct) { -- 2.1.4 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel