Это прекрасно работает для локальных файлов, но не работает также и для удаленных файлов. У меня есть приложение, которое использует скрепку для загрузки изображений. Эти изображения хранятся на Amazon S3. В любом случае, у меня были старые данные, которые мне нужно было импортировать, поэтому я попробовал следующее:
thing.image = open('http://www.someurl.com/path/to/image.jpg')
thing.save
Если файл небольшой (скажем, менее 10 КБ), openuri возвращает объект stringio, и мой файл будет сохранен на s3 как stringio.txt
Если размер файла превышает 10 КБ, openuri возвращает объект TempFile. Но имя файла на s3 оказывается уникальным, но не относится к исходному имени файла image.jpg
Мне удалось решить проблему, выполнив следующие действия:
remote_photo = open('http://www.someurl.com/path/to/image.jpg')
def remote_photo.original_filename;base_uri.path.split('/').last; end
thing.image = remote_photo
thing.save