私は、django Webサーバーにzipファイルをアップロードし、そのプロセスで実際のファイルシステムにアクセスすることなくzipファイルをdjangoデータベースに入れる方法があるかどうか疑問に思っています。 tmpディレクトリをロードしてからロードしてください)ZipExtFile to Djangoファイル
DjangoはPythonファイルをDjangoファイルに変換する機能を提供しています。そのため、ZipExtFileをPython Fileに変換する方法があれば問題ありません。
助けてくれてありがとう!
Djangoのモデル:
from django.db import models
class Foo:
file = models.FileField(upload_to='somewhere')
は使用方法:
from zipfile import ZipFile
from django.core.exceptions import ValidationError
from django.core.files import File
from io import BytesIO
z = ZipFile('zipFile')
istream = z.open('subfile')
ostream = BytesIO(istream.read())
tmp = Foo(file=File(ostream))
try:
tmp.full_clean()
except Validation, e:
print e
出力:
{'file': [u'This field cannot be blank.']}
[SOLUTION]ソリューション醜いハックを使用して:として正しくによって指摘
ドンクエスト、ファイルのようなクラスStringIOやBytesIOのようなものは、データを仮想ファイルとして表現する必要があります。しかし、Django Fileのコンストラクタは、組み込みファイルの種類だけを受け付けますが、それ以外のものは受け付けませんが、ファイルのようなクラスでも同様に処理が行われます。
buf = bytesarray(OPENED_ZIP_OBJECT.read(FILE_NAME))
tmp_file = BytesIO(buf)
dummy_file = File(tmp_file) # this line actually fails
dummy_file.name = SOME_RANDOM_NAME
dummy_file.size = len(buf)
dummy_file.file = tmp_file
# dummy file is now valid
あなたは(独自のストレージを除く)より良い解決策を持っている場合はDjangoについて多くを知らないコメント
あなたがカスタムファイルストレージを使用しない限り、ファイルはまだファイルシステムにヒットしますが、Donは適切なアイデアを持っています。 –
https://docs.djangoproject.com/en/dev/howto/custom-file-storage/ – tkone
答えに感謝します。しかし、私は簡単にzipファイルを保存することができ、zipファイルのファイルは元のzipファイルと同じにする必要があるので、なぜこれが直接動作しないのか分かりません。答えのために – guinny