From 38e0c237a448c5d59caad9c6bab8461c7a118c09 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Wed, 15 Aug 2007 15:36:15 +0000 Subject: [PATCH] Image attachments are now sent inline to be viewed directly in the browser. git-svn-id: http://redmine.rubyforge.org/svn/trunk@642 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/attachments_controller.rb | 15 +++++---------- app/helpers/application_helper.rb | 2 +- app/models/attachment.rb | 4 ++++ 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 3ddb052dd..0913de529 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -19,18 +19,13 @@ class AttachmentsController < ApplicationController layout 'base' before_filter :find_project, :check_project_privacy - # sends an attachment def download - send_file @attachment.diskfile, :filename => @attachment.filename - rescue - render_404 - end - - # sends an image to be displayed inline - def show - render(:nothing => true, :status => 404) and return unless @attachment.diskfile =~ /\.(jpeg|jpg|gif|png)$/i - send_file @attachment.diskfile, :filename => @attachment.filename, :type => "image/#{$1}", :disposition => 'inline' + # images are sent inline + send_file @attachment.diskfile, :filename => @attachment.filename, + :type => @attachment.content_type, + :disposition => (@attachment.image? ? 'inline' : 'attachment') rescue + # in case the disk file was deleted render_404 end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index cdf69d76c..f4d8a0d54 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -163,7 +163,7 @@ module ApplicationHelper rf = Regexp.new(filename, Regexp::IGNORECASE) # search for the picture in attachments if found = attachments.detect { |att| att.filename =~ rf } - image_url = url_for :controller => 'attachments', :action => 'show', :id => found.id + image_url = url_for :controller => 'attachments', :action => 'download', :id => found.id "!#{align}#{image_url}!" else "!#{align}#{filename}!" diff --git a/app/models/attachment.rb b/app/models/attachment.rb index 108baf99a..443a75bab 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -84,6 +84,10 @@ class Attachment < ActiveRecord::Base container.is_a?(Project) ? container : container.project end + def image? + self.filename =~ /\.(jpeg|jpg|gif|png)$/i + end + private def sanitize_filename(value) # get only the filename, not the whole path