#699 Double file copying during upload removed'

This commit is contained in:
Karel Picman 2017-04-27 16:25:16 +02:00
parent 855e52708a
commit bf282ff280
12 changed files with 50 additions and 58 deletions

View File

@ -129,10 +129,12 @@ class DmsfFilesController < ApplicationController
end
else
upload = DmsfUpload.create_from_uploaded_attachment(@project, @folder, file_upload)
revision.size = upload.size
revision.disk_filename = revision.new_storage_filename
revision.mime_type = upload.mime_type
revision.digest = DmsfFileRevision.create_digest upload.disk_file
if upload
revision.size = upload.size
revision.disk_filename = revision.new_storage_filename
revision.mime_type = upload.mime_type
revision.digest = DmsfFileRevision.create_digest upload.disk_file
end
end
# Custom fields

View File

@ -68,30 +68,7 @@ class DmsfUploadController < ApplicationController
return
end
@disk_filename = DmsfHelper.temp_filename(@tempfile.original_filename)
target = "#{DmsfHelper.temp_dir}/#{@disk_filename}"
begin
FileUtils.cp @tempfile.path, target
FileUtils.chmod 'u=wr,g=r', target
rescue Exception => e
Rails.logger.error e.message
end
if File.size(target) <= 0
begin
File.delete target
rescue Exception => e
Rails.logger.error e.message
end
render :layout => nil, :json => { :jsonrpc => '2.0',
:error => {
:code => 103,
:message => l(:header_minimum_filesize),
:details => l(:error_minimum_filesize,
:file => @tempfile.original_filename.to_s)
}
}
else
render :layout => false
end
render :layout => false
end
# REST API document upload
@ -133,7 +110,7 @@ class DmsfUploadController < ApplicationController
uploaded_files = attachments.select { |key, value| key == 'uploaded_file'}
uploaded_files.each_value do |uploaded_file|
upload = DmsfUpload.create_from_uploaded_attachment(@project, @folder, uploaded_file)
uploaded_file[:disk_filename] = upload.disk_filename
uploaded_file[:disk_filename] = upload.disk_filename if upload
end
commit_files_internal uploaded_files
end

View File

@ -60,8 +60,6 @@ module DmsfUploadHelper
next
end
commited_disk_filepath = "#{DmsfHelper.temp_dir}/#{commited_file[:disk_filename].gsub(/[\/\\]/,'')}"
new_revision.dmsf_file = file
new_revision.user = User.current
new_revision.name = name
@ -75,9 +73,9 @@ module DmsfUploadHelper
else
new_revision.increase_version(version)
end
new_revision.mime_type = Redmine::MimeType.of(new_revision.name)
new_revision.size = File.size(commited_disk_filepath)
new_revision.digest = DmsfFileRevision.create_digest commited_disk_filepath
new_revision.mime_type = commited_file[:mime_type]
new_revision.size = commited_file[:size]
new_revision.digest = DmsfFileRevision.create_digest commited_file[:tempfile_path]
if commited_file[:custom_field_values].present?
commited_file[:custom_field_values].each_with_index do |v, i|
@ -98,7 +96,8 @@ module DmsfUploadHelper
if new_revision.save
new_revision.assign_workflow(commited_file[:dmsf_workflow_id])
begin
FileUtils.mv(commited_disk_filepath, new_revision.disk_file)
FileUtils.mv commited_file[:tempfile_path], new_revision.disk_file
FileUtils.chmod 'u=wr,g=r', new_revision.disk_file
file.set_last_revision new_revision
files.push(file)
if file.container.is_a?(Issue)

View File

@ -85,12 +85,10 @@ class DmsfFile < ActiveRecord::Base
:date_column => "#{table_name}.updated_at"
before_create :default_values
def default_values
@notifications = Setting.plugin_redmine_dmsf['dmsf_default_notifications']
if @notifications == '1'
if (Setting.plugin_redmine_dmsf['dmsf_default_notifications'] == '1') && (!self.dmsf_folder || !self.dmsf_folder.system)
self.notification = true
else
self.notification = nil
end
end

View File

@ -113,11 +113,8 @@ class DmsfFolder < ActiveRecord::Base
end
def default_values
@notifications = Setting.plugin_redmine_dmsf['dmsf_default_notifications']
if @notifications == '1'
if Setting.plugin_redmine_dmsf['dmsf_default_notifications'] == '1' && !self.system
self.notification = true
else
self.notification = nil
end
end

View File

@ -33,6 +33,7 @@ class DmsfUpload
attr_accessor :locked
attr_accessor :workflow
attr_accessor :custom_values
attr_accessor :tempfile_path
def disk_file
"#{DmsfHelper.temp_dir}/#{self.disk_filename}"
@ -45,15 +46,14 @@ class DmsfUpload
:disk_filename => DmsfHelper.temp_filename(a.filename),
:content_type => a.content_type,
:original_filename => a.filename,
:comment => uploaded_file[:description]
:comment => uploaded_file[:description],
:tempfile_path => a.diskfile
}
FileUtils.mv(a.diskfile, "#{DmsfHelper.temp_dir}/#{uploaded[:disk_filename]}")
a.destroy
upload = DmsfUpload.new(project, folder, uploaded)
DmsfUpload.new(project, folder, uploaded)
else
Rails.logger.error "An attachment not found by its token: #{uploaded_file[:token]}"
nil
end
upload
end
def initialize(project, folder, uploaded)
@ -67,7 +67,8 @@ class DmsfUpload
@disk_filename = uploaded[:disk_filename]
@mime_type = uploaded[:content_type]
@size = File.size(disk_file)
@size = File.size(uploaded[:tempfile_path])
@tempfile_path = uploaded[:tempfile_path]
if file.nil? || file.last_revision.nil?
@title = DmsfFileRevision.filename_to_title(@name)

View File

@ -128,6 +128,10 @@
.attr('name', 'uploaded[' + dmsfFileFieldCount + '][original_filename]')
.val(responseObject.original_filename);
uploader.append(original_filename_input);
var tempfile_path = $('<input/>').attr('type', 'hidden')
.attr('name', 'uploaded[' + dmsfFileFieldCount + '][tempfile_path]')
.val(responseObject.tempfile_path);
uploader.append(tempfile_path);
} else {
file.status = plupload.FAILED;
pluploader.trigger('UploadProgress', file);

View File

@ -24,6 +24,9 @@
<div class="box tabular">
<%= hidden_field_tag("commited_files[#{i}][disk_filename]", upload.disk_filename) %>
<%= hidden_field_tag("commited_files[#{i}][tempfile_path]", upload.tempfile_path) %>
<%= hidden_field_tag("commited_files[#{i}][size]", upload.size) %>
<%= hidden_field_tag("commited_files[#{i}][mime_type]", upload.mime_type) %>
<div class="clear">
<div class="splitcontentleft">
<p>

View File

@ -24,6 +24,9 @@
<div class="box tabular">
<%= hidden_field_tag("commited_files[#{i}][disk_filename]", upload.disk_filename) %>
<%= hidden_field_tag("commited_files[#{i}][tempfile_path]", upload.tempfile_path) %>
<%= hidden_field_tag("commited_files[#{i}][size]", upload.size) %>
<%= hidden_field_tag("commited_files[#{i}][mime_type]", upload.mime_type) %>
<%= hidden_field_tag("commited_files[#{i}][name]", upload.name) %>
<p class="warning"><%= l(:info_file_locked) %></p>
<div class="clear">

View File

@ -19,8 +19,12 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.%>
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
%>
{"original_filename":"<%= (@tempfile.original_filename).html_safe %>",
"content_type":"<%= (@tempfile.content_type.gsub('"', '')).html_safe %>",
"disk_filename":"<%= (@disk_filename).html_safe %>"}
{
"original_filename":"<%= @tempfile.original_filename.html_safe %>",
"content_type": "<%= @tempfile.content_type.gsub('"', '').html_safe %>",
"disk_filename": "<%= @disk_filename.html_safe %>",
"tempfile_path": "<%= @tempfile.path.html_safe %>"
}

View File

@ -41,7 +41,6 @@
<% else %>
<%= render(:partial => 'upload_file', :locals => {:upload => upload, :i => i}) %>
<% end %>
<% i += 1 %>
<% end %>
<%= submit_tag l(:submit_commit) %>
<% end %>

View File

@ -56,10 +56,15 @@ module RedmineDmsf
system_folder = issue.system_folder(true)
uploaded_files.each_value do |uploaded_file|
upload = DmsfUpload.create_from_uploaded_attachment(issue.project, system_folder, uploaded_file)
uploaded_file[:disk_filename] = upload.disk_filename
uploaded_file[:name] = upload.name
uploaded_file[:title] = upload.title
uploaded_file[:version] = 1
if upload
uploaded_file[:disk_filename] = upload.disk_filename
uploaded_file[:name] = upload.name
uploaded_file[:title] = upload.title
uploaded_file[:version] = 1
uploaded_file[:size] = upload.size
uploaded_file[:mime_type] = upload.mime_type
uploaded_file[:tempfile_path] = upload.tempfile_path
end
end
DmsfUploadHelper.commit_files_internal uploaded_files, issue.project, system_folder,
context[:controller]