Web から画像ファイルをダウンロードし、メタデータを含む画像ファイルをデータベースに保存する Celery タスクを実装しました。
実はDjangoを使ってImageFieldModel
いるので、メタデータはデータベースに保存し、ファイルはAzure Blob Storageに保存しています。
デモ環境では問題なく動いています。イメージファイルは、ワーカーと物理的に同じ場所にあるファイルシステムに保存されます。
ただし、展開環境に問題があります。ファイル ストレージは Azure Blob Storage です。
場合によっては、Imagefile が保存されないことがあります。メタデータはデータベースでソートされます。
なぜこれが起こるのか誰にも分かりません。
画像ファイルを保存する方法は非常に簡単です。
new_contents = ImageContents(user = user, privacy = privacy)
new_contents.thumb_file.save('filename.jpeg', thumb_file, save = True)
new_contents.save()
Azure Blob Storage に django-storage を実装しました。
これは、django アプリでファイルを開くコードです。
def _open(self, name, mode='rb'):
inMemFile = StringIO.StringIO(self.blob.get_blob(self.container, name))
inMemFile.name = name
inMemFile.mode = mode
return File(inMemFile)