Filename in the download link

This commit is contained in:
Karel Pičman 2022-05-25 16:02:57 +02:00
parent aef2ff3b0e
commit e2d67406db
5 changed files with 15 additions and 8 deletions

View File

@ -69,12 +69,13 @@ class DmsfFilesController < ApplicationController
member = Member.find_by(user_id: User.current.id, project_id: @file.project.id) member = Member.find_by(user_id: User.current.id, project_id: @file.project.id)
# IE has got a tendency to cache files # IE has got a tendency to cache files
expires_in 0.year, 'must-revalidate' => true expires_in 0.year, 'must-revalidate' => true
pdf_preview = @file.pdf_preview pdf_preview = (params[:disposition] != 'attachment') && params[:filename].blank? && @file.pdf_preview
filename = filename_for_content_disposition(@revision.formatted_name(member)) filename = filename_for_content_disposition(@revision.formatted_name(member))
if pdf_preview.present? if pdf_preview.present?
basename = File.basename(filename, '.*') basename = File.basename(filename, '.*')
send_file pdf_preview, filename: "#{basename}.pdf", type: 'application/pdf', disposition: 'inline' send_file pdf_preview, filename: "#{basename}.pdf", type: 'application/pdf', disposition: 'inline'
else else
params[:disposition] = 'attachment' if params[:filename].present?
send_file @revision.disk_file, filename: filename, type: @revision.detect_content_type, send_file @revision.disk_file, filename: filename, type: @revision.detect_content_type,
disposition: params[:disposition].present? ? params[:disposition] : @revision.dmsf_file.disposition disposition: params[:disposition].present? ? params[:disposition] : @revision.dmsf_file.disposition
end end

View File

@ -62,8 +62,10 @@
back_url: back_url } %> back_url: back_url } %>
</li> </li>
<li> <li>
<%= context_menu_link l(:button_download), view_dmsf_file_path(dmsf_file, disposition: 'attachment'), <% member = Member.find_by(user_id: User.current.id, project_id: dmsf_file.project.id) %>
class: 'icon icon-download', disabled: false %> <% filename = dmsf_file.last_revision&.formatted_name(member) %>
<%= context_menu_link l(:button_download), static_dmsf_file_path(dmsf_file, filename: filename),
class: 'icon icon-download', disabled: false %>
</li> </li>
<li> <li>
<%= context_menu_link l(:field_mail), entries_operations_dmsf_path(id: project, folder_id: folder, <%= context_menu_link l(:field_mail), entries_operations_dmsf_path(id: project, folder_id: folder,

View File

@ -23,10 +23,10 @@
<%= link_to_function l(:title_download_entries), <%= link_to_function l(:title_download_entries),
"$('#revision_access_#{revision.id}').toggle(); $('.drdn.expanded').removeClass('expanded');", "$('#revision_access_#{revision.id}').toggle(); $('.drdn.expanded').removeClass('expanded');",
class: 'icon icon-group dmsf-revision-action-button' %> class: 'icon icon-group dmsf-revision-action-button' %>
<%= link_to l(:title_download), <% member = Member.find_by(user_id: User.current.id, project_id: revision.dmsf_file.project.id) %>
view_dmsf_file_path(file, download: revision, disposition: 'attachment'), <% filename = revision.formatted_name(member) %>
title: l(:title_title_version_version_download, title: h(revision.title), version: revision.version), <%= link_to l(:button_download), static_dmsf_file_path(file, download: revision, filename: filename),
class: 'icon icon-download dmsf-revision-action-button' %> class: 'icon icon-download', disabled: false %>
<%= link_to l(:title_obsolete_revision), <%= link_to l(:title_obsolete_revision),
obsolete_revision_path(revision), obsolete_revision_path(revision),
data: { confirm: l(:text_are_you_sure) }, data: { confirm: l(:text_are_you_sure) },

View File

@ -40,7 +40,10 @@
class: 'icon dmsf-icon-link' %> class: 'icon dmsf-icon-link' %>
<%= link_to "#{l(:button_copy)}/#{l(:button_move)}", copy_file_path(id: file, back_url: back_url), <%= link_to "#{l(:button_copy)}/#{l(:button_move)}", copy_file_path(id: file, back_url: back_url),
title: l(:title_copy), class: 'icon icon-copy' %> title: l(:title_copy), class: 'icon icon-copy' %>
<%= link_to l(:button_download), view_dmsf_file_path(file, disposition: 'attachment'), class: 'icon icon-download' %> <% member = Member.find_by(user_id: User.current.id, project_id: file.project.id) %>
<% filename = file.last_revision&.formatted_name(member) %>
<%= link_to l(:button_download), static_dmsf_file_path(file, filename: filename), class: 'icon icon-download',
disabled: false %>
<%= render partial: 'dmsf_context_menus/watch', locals: { object: file } %> <%= render partial: 'dmsf_context_menus/watch', locals: { object: file } %>
<%= delete_link(dmsf_file_path(id: file, details: true), <%= delete_link(dmsf_file_path(id: file, details: true),
back_url: dmsf_folder_path(id: file.project, folder_id: file.dmsf_folder)) if file_delete_allowed %> back_url: dmsf_folder_path(id: file.project, folder_id: file.dmsf_folder)) if file_delete_allowed %>

View File

@ -96,6 +96,7 @@ if Redmine::Plugin.installed? :redmine_dmsf
get '/dmsf/files/:id/revision/obsolete', controller: 'dmsf_files', action: 'obsolete_revision', as: 'obsolete_revision' get '/dmsf/files/:id/revision/obsolete', controller: 'dmsf_files', action: 'obsolete_revision', as: 'obsolete_revision'
get '/dmsf/files/:id/download', to: 'dmsf_files#view', download: '', as: 'download_dmsf_file' # Otherwise will not route nil into the download param get '/dmsf/files/:id/download', to: 'dmsf_files#view', download: '', as: 'download_dmsf_file' # Otherwise will not route nil into the download param
get '/dmsf/files/:id/view', to: 'dmsf_files#view', as: 'view_dmsf_file' get '/dmsf/files/:id/view', to: 'dmsf_files#view', as: 'view_dmsf_file'
get '/dmsf/files/:id/:filename', to: 'dmsf_files#view', :id => /\d+/, :filename => /.*/, as: 'static_dmsf_file'
get '/dmsf/files/:id', controller: 'dmsf_files', action: 'show', as: 'dmsf_file' get '/dmsf/files/:id', controller: 'dmsf_files', action: 'show', as: 'dmsf_file'
delete '/dmsf/files/:id', controller: 'dmsf_files', action: 'delete' delete '/dmsf/files/:id', controller: 'dmsf_files', action: 'delete'
get '/dmsf/files/:id/restore', controller: 'dmsf_files', action: 'restore', as: 'restore_dmsf_file' get '/dmsf/files/:id/restore', controller: 'dmsf_files', action: 'restore', as: 'restore_dmsf_file'