2016-10-18 6 views
0

私は以下のような状況があります。私のOSは、私がPOSTリクエストで得たdjango TemporaryUploadedFileがもう存在しないことを示していますが、何とかこのアップロードされたファイルを読むことができます。それは、後にも削除されfile_newに保存された後Django TemporaryUploadedFileは存在しませんが、それでも正しく読み込まれます

/tmp/tmp0tngal9t.upload foo.txt 
-rw------- 1 mine machine 3072889 oct 18 19:29 /tmp/tmp0tngal9t.upload 

/tmp/tmp0tngal9t.upload foo.txt 
ls: cannot access '/tmp/tmp0tngal9t.upload': No such file or directory 

Got text OK. 

のでTemporaryUploadedFileが消えている: はここにこれは次の出力を与えるコード

text_file = request.FILES['text_file'] 

print(text_file.temporary_file_path()) 
os.system('ls -l ' + text_file.temporary_file_path()) 

fs = FileSystemStorage() 
file_new =fs.save(text_file.name, text_file) 

print(text_file.temporary_file_path()) 
os.system('ls -l ' + text_file.temporary_file_path()) 

fs.delete(file_new) 

for chunk in text_file.chunks(): 
    text += chunk.decode(encoding) 

print('Got text OK.') 

です。とにかくtext_fileはチャンクによって正常に読み込まれ、私はアップロードされたfoo.txtファイルからすべてのテキストを取得します。どのように可能ですか?そこからtext_file.chunks()がデータを取得すると、text_fileはもう存在しませんか?

は、私が使用します。

  • python 3.5.2
  • django 1.10.2
  • ubuntu 16.04.1

答えて

0

私は特にのようにジャンゴに関連していないので、この問題はまだ、裸のpythonのために残っていることが判明しましたこの例では、request.FILES['text_file']で開いていたtext_fileを読みました。

私は同様の質問を再質問しましたhereは、pythonのみに焦点を当てています。問題はPythonとはあまり関係がありませんが、Linux/Unixのシステムファイル管理では判明しました。私はここで引用しますanswer of Jean-François Fabre

Pythonとは関係ありません。 C、Fortran、またはVisual Cobolでは、 は、コードがそのハンドルをオープン システムコールから取得する限り同じ動作をします。

Linux/Unixシステムでは、プロセスがファイルにハンドルを設定すると、ファイルが削除されてもそれを読み取ることができます( )。詳細については、 の質問を確認してください(これは問題ないとは思われませんでした)

Windowsでは、 がロックされていればファイルを削除できませんプロセス。