私のDjangoアプリケーションでは、巨大なファイルを処理する必要があります。 Webアプリケーションを介してアップロードする代わりに、ユーザはSamba共有上のフォルダ(.dump
)に配置し、Djangoアプリでそのファイルを選択してDjangoアプリケーションから新しいモデルインスタンスを作成することができます。ビューは、おおよそ次のようになります。MEDIA_ROOT
と.dump
としてなぜ同じパーティションの既存ファイルからdjango FileFieldを設定するのが遅いのですか?
class AddDumpedMeasurement(View):
def get(self, request, *args, **kwargs):
filename = request.GET.get('filename', None)
dump_dir = os.path.join(settings.MEDIA_ROOT, settings.MEASUREMENT_DATA_DUMP_PATH)
in_file = os.path.join(dump_dir, filename)
if isfile(in_file):
try:
with open(in_file, 'rb') as f:
object = NCFile.objects.create(sample=sample, created_by=request.user, file=File(f))
return JsonResponse(data={'redirect': object.get_absolute_url()})
except:
return JsonResponse(data={'error': 'Couldn\'t read file'}, status=400)
else:
return JsonResponse(data={'error': 'File not found'}, status=400)
その新しい場所に遅いので、ファイルを移動している理由を、(Webサーバによって実装されている)と同じSamba共有上にありますか?私はそれがほぼ瞬時になると予想していたでしょう。それは私がopen()
とそれをストリームファイルオブジェクトにバイトですか?その場合は、ファイルを正しい場所に移動してモデルインスタンスを作成するより良い方法がありますか?
これは本当です。回避策として、私は自分の質問に編集した解決策のように明示的にファイルを移動する必要があります。 – janoliver
素晴らしい!しかし、あなたが知っているように、標準的な練習は質問を編集するのではなく、あなた自身の答えを投稿することです。それをして正しいものとして受け入れてください。しかし、dont 'upvoteに正しい方向にあなたを送った有益な答えを与えるのを忘れないでください:) – e4c5