#9 Active Storage - Mime type removed from the revision
This commit is contained in:
parent
deb63e2b03
commit
4a9f806783
@ -140,7 +140,6 @@ class DmsfFilesController < ApplicationController
|
||||
if upload
|
||||
revision.size = upload.size
|
||||
revision.disk_filename = revision.new_storage_filename
|
||||
revision.mime_type = upload.mime_type
|
||||
revision.file.attach(
|
||||
io: File.open(upload.tempfile_path),
|
||||
filename: revision.disk_filename,
|
||||
@ -151,7 +150,6 @@ class DmsfFilesController < ApplicationController
|
||||
else
|
||||
revision.size = last_revision.size
|
||||
revision.disk_filename = last_revision.disk_filename
|
||||
revision.mime_type = last_revision.mime_type
|
||||
end
|
||||
# Custom fields
|
||||
revision.copy_custom_field_values(params[:dmsf_file_revision][:custom_field_values], last_revision)
|
||||
|
||||
@ -113,7 +113,6 @@ class DmsfUploadController < ApplicationController
|
||||
uploaded_file[:disk_filename] = upload.disk_filename
|
||||
uploaded_file[:tempfile_path] = upload.tempfile_path
|
||||
uploaded_file[:size] = upload.size
|
||||
uploaded_file[:digest] = upload.digest
|
||||
uploaded_file[:mime_type] = upload.mime_type
|
||||
end
|
||||
commit_files_internal uploaded_files
|
||||
|
||||
@ -68,7 +68,6 @@ module DmsfUploadHelper
|
||||
new_revision.patch_version = if committed_file[:version_patch].present?
|
||||
DmsfUploadHelper.db_version committed_file[:version_patch]
|
||||
end
|
||||
new_revision.mime_type = committed_file[:mime_type]
|
||||
new_revision.size = committed_file[:size]
|
||||
# Custom fields
|
||||
new_revision.copy_custom_field_values(committed_file[:custom_field_values])
|
||||
|
||||
@ -115,7 +115,11 @@ class DmsfFileRevision < ApplicationRecord
|
||||
end
|
||||
|
||||
def checksum
|
||||
file.blob.checksum
|
||||
file.blob&.checksum
|
||||
end
|
||||
|
||||
def mime_type
|
||||
file.blob&.content_type
|
||||
end
|
||||
|
||||
def visible?(_user = nil)
|
||||
@ -231,7 +235,6 @@ class DmsfFileRevision < ApplicationRecord
|
||||
new_revision.dmsf_file = dmsf_file
|
||||
new_revision.disk_filename = disk_filename
|
||||
new_revision.size = size
|
||||
new_revision.mime_type = mime_type
|
||||
new_revision.title = title
|
||||
new_revision.description = description
|
||||
new_revision.workflow = workflow
|
||||
@ -322,7 +325,7 @@ class DmsfFileRevision < ApplicationRecord
|
||||
file.attach(
|
||||
io: open_file,
|
||||
filename: dmsf_file.name,
|
||||
content_type: mime_type,
|
||||
content_type: mime_type.presence || Redmine::MimeType.of(disk_filename),
|
||||
identify: false
|
||||
)
|
||||
end
|
||||
|
||||
@ -32,7 +32,7 @@ class DmsfUpload
|
||||
if a
|
||||
uploaded = {
|
||||
disk_filename: DmsfHelper.temp_filename(a.filename),
|
||||
content_type: a.content_type,
|
||||
content_type: a.content_type.presence || 'application/octet-stream',
|
||||
original_filename: a.filename,
|
||||
comment: uploaded_file[:description],
|
||||
tempfile_path: a.diskfile,
|
||||
@ -53,7 +53,6 @@ class DmsfUpload
|
||||
@size = 0
|
||||
@tempfile_path = ''
|
||||
@token = ''
|
||||
@digest = ''
|
||||
if RedmineDmsf.empty_minor_version_by_default?
|
||||
@major_version = 1
|
||||
@minor_version = nil
|
||||
@ -85,7 +84,6 @@ class DmsfUpload
|
||||
end
|
||||
@tempfile_path = uploaded[:tempfile_path]
|
||||
@token = uploaded[:token]
|
||||
@digest = uploaded[:digest]
|
||||
|
||||
if file.nil? || file.last_revision.nil?
|
||||
@title = DmsfFileRevision.filename_to_title(@name)
|
||||
|
||||
@ -35,7 +35,7 @@ api.dmsf_file do
|
||||
api.dmsf_workflow_started_by_user_id r.dmsf_workflow_started_by_user_id
|
||||
api.dmsf_workflow_started_at r.dmsf_workflow_started_at
|
||||
api.dmsf_worklfow_state r.workflow_str(false)
|
||||
api.digest r.digest
|
||||
api.digest r.checksum
|
||||
render_api_custom_values r.visible_custom_field_values, api
|
||||
end
|
||||
end
|
||||
|
||||
@ -18,13 +18,17 @@
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
|
||||
# Add column
|
||||
class RemoveDigestFromRevision < ActiveRecord::Migration[7.0]
|
||||
class RemoveDuplicitiesFromRevision < ActiveRecord::Migration[7.0]
|
||||
def up
|
||||
remove_column :dmsf_file_revisions, :digest
|
||||
remove_column :dmsf_file_revisions, :mime_type
|
||||
# We need to keep the size despite the fact that it's duplicated in active_storage_blobs to speed up the main
|
||||
# document view
|
||||
end
|
||||
|
||||
def down
|
||||
add_column :dmsf_file_revisions, :digest, :string, limit: 64, default: '', null: false
|
||||
# Recalculation of checksums for all revisions is technically possible but costs are too high.
|
||||
add_column :dmsf_file_revisions, :mime_type, :string
|
||||
# Recalculation of these columns for all revisions is technically possible but costs are too high.
|
||||
end
|
||||
end
|
||||
@ -599,7 +599,6 @@ module RedmineDmsf
|
||||
new_revision.dmsf_file = f
|
||||
new_revision.user = User.current
|
||||
new_revision.name = basename
|
||||
new_revision.mime_type = Redmine::MimeType.of(new_revision.name)
|
||||
|
||||
# Phusion passenger does not have a method "length" in its model
|
||||
# however, includes a size method - so we instead use reflection
|
||||
@ -786,9 +785,7 @@ module RedmineDmsf
|
||||
r.dmsf_file = f
|
||||
r.user = User.current
|
||||
r.name = basename
|
||||
r.mime_type = Redmine::MimeType.of(r.name)
|
||||
r.size = 0
|
||||
r.digest = 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
|
||||
r.disk_filename = r.new_storage_filename
|
||||
r.available_custom_fields.each do |cf| # Add default value for CFs not existing
|
||||
next unless cf.default_value
|
||||
|
||||
2
test/fixtures/active_storage_blobs.yml
vendored
2
test/fixtures/active_storage_blobs.yml
vendored
@ -3,7 +3,7 @@ active_storage_blob_1:
|
||||
id: 1
|
||||
key: '5lge4yv88jwzt7xl76vri2be1v01'
|
||||
filename: 'test.txt'
|
||||
content_type: 'tect/plain'
|
||||
content_type: 'text/plain'
|
||||
metadata: '{"identified":true,"analyzed":true}'
|
||||
service_name: 'test'
|
||||
byte_size: 3
|
||||
|
||||
@ -150,6 +150,6 @@ class DmsfFilesControllerTest < RedmineDmsf::Test::TestCase
|
||||
}
|
||||
end
|
||||
assert_redirected_to dmsf_folder_path(id: @file1.project)
|
||||
assert_not_nil @file1.last_revision.digest
|
||||
assert_not_nil @file1.last_revision.checksum
|
||||
end
|
||||
end
|
||||
|
||||
@ -90,7 +90,7 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
|
||||
params: '1234',
|
||||
headers: @jsmith.merge!({ content_type: :text })
|
||||
assert_response :forbidden
|
||||
# Lets check for our file
|
||||
# Let's check for our file
|
||||
file = DmsfFile.find_file_by_name @project2, nil, 'test-1234.txt'
|
||||
assert_nil file, 'Check for files existance'
|
||||
end
|
||||
@ -112,7 +112,6 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
|
||||
file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt'
|
||||
assert file, 'File test-1234 was not found in projects dmsf folder.'
|
||||
assert file.last_revision
|
||||
assert_equal 'MD5', file.last_revision.digest_type
|
||||
|
||||
with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1',
|
||||
'dmsf_webdav' => '1',
|
||||
@ -381,8 +380,8 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
|
||||
headers: @jsmith.merge!({ content_type: :text })
|
||||
assert_response :created
|
||||
end
|
||||
sha = @file1.last_revision.file.checksum
|
||||
assert_equal sha, @file1.last_revision.digest
|
||||
checksum = Digest::MD5.base64digest('1234')
|
||||
assert_equal checksum, @file1.last_revision.checksum
|
||||
end
|
||||
|
||||
def test_put_version
|
||||
|
||||
@ -89,7 +89,6 @@ class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest
|
||||
r1.title = DmsfFileRevision.filename_to_title(r1.name)
|
||||
r1.description = nil
|
||||
r1.comment = nil
|
||||
r1.mime_type = nil
|
||||
r1.size = 4
|
||||
|
||||
r2 = r1.clone
|
||||
@ -132,7 +131,6 @@ class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest
|
||||
r1.title = DmsfFileRevision.filename_to_title(r1.name)
|
||||
r1.description = nil
|
||||
r1.comment = nil
|
||||
r1.mime_type = nil
|
||||
r1.size = 4
|
||||
assert r1.invalid?
|
||||
message = ['Attachment extension .png is not allowed']
|
||||
@ -215,32 +213,32 @@ class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest
|
||||
end
|
||||
|
||||
def test_protocol_doc
|
||||
@revision1.mime_type = Redmine::MimeType.of('test.doc')
|
||||
@revision1.file.blob.content_type = Redmine::MimeType.of('test.doc')
|
||||
assert_equal 'ms-word', @revision1.protocol
|
||||
end
|
||||
|
||||
def test_protocol_docx
|
||||
@revision1.mime_type = Redmine::MimeType.of('test.docx')
|
||||
@revision1.file.blob.content_type = Redmine::MimeType.of('test.docx')
|
||||
assert_equal 'ms-word', @revision1.protocol
|
||||
end
|
||||
|
||||
def test_protocol_odt
|
||||
@revision1.mime_type = Redmine::MimeType.of('test.odt')
|
||||
@revision1.file.blob.content_type = Redmine::MimeType.of('test.odt')
|
||||
assert_equal 'ms-word', @revision1.protocol
|
||||
end
|
||||
|
||||
def test_protocol_xls
|
||||
@revision1.mime_type = Redmine::MimeType.of('test.xls')
|
||||
@revision1.file.blob.content_type = Redmine::MimeType.of('test.xls')
|
||||
assert_equal 'ms-excel', @revision1.protocol
|
||||
end
|
||||
|
||||
def test_protocol_xlsx
|
||||
@revision1.mime_type = Redmine::MimeType.of('test.xlsx')
|
||||
@revision1.file.blob.content_type = Redmine::MimeType.of('test.xlsx')
|
||||
assert_equal 'ms-excel', @revision1.protocol
|
||||
end
|
||||
|
||||
def test_protocol_ods
|
||||
@revision1.mime_type = Redmine::MimeType.of('test.ods')
|
||||
@revision1.file.blob.content_type = Redmine::MimeType.of('test.ods')
|
||||
assert_equal 'ms-excel', @revision1.protocol
|
||||
end
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user