diff --git a/api/funkwhale_api/music/utils.py b/api/funkwhale_api/music/utils.py index 5031e69ba8030f3db1ec4bffa22bd01af1151c5f..571bc4ddd42509320a9ec4ec8a9f3e503d9708da 100644 --- a/api/funkwhale_api/music/utils.py +++ b/api/funkwhale_api/music/utils.py @@ -12,7 +12,7 @@ def guess_mimetype(f): t = magic.from_buffer(f.read(b), mime=True) if not t.startswith("audio/"): # failure, we try guessing by extension - mt, _ = mimetypes.guess_type(f.path) + mt, _ = mimetypes.guess_type(f.name) if mt: t = mt return t diff --git a/api/tests/music/test_utils.py b/api/tests/music/test_utils.py index 87eaddc435d9270e29a0750a60f32b2af7f6e74f..982422c34a07978d9438d44044cd59f550682f30 100644 --- a/api/tests/music/test_utils.py +++ b/api/tests/music/test_utils.py @@ -36,3 +36,12 @@ def test_get_audio_file_data(name, expected): result = utils.get_audio_file_data(f) assert result == expected + + +def test_guess_mimetype_dont_crash_with_s3(factories, mocker, settings): + """See #857""" + settings.DEFAULT_FILE_STORAGE = "funkwhale_api.common.storage.ASCIIS3Boto3Storage" + mocker.patch("magic.from_buffer", return_value="none") + f = factories["music.Upload"].build(audio_file__filename="test.mp3") + + assert utils.guess_mimetype(f.audio_file) == "audio/mpeg" diff --git a/changes/changelog.d/857.bugfix b/changes/changelog.d/857.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..5d525e3d9fd16f0cd0fff579be8edefb181c4b66 --- /dev/null +++ b/changes/changelog.d/857.bugfix @@ -0,0 +1 @@ +Fix broken upload for specific files when using S3 storage (#857)