从Django <inmemoryuploadedfile>创建文件

时间:2016-10-05 16:08:30

标签: python django python-2.7

我从Django网站的表单上传了几个.xlsx文件。由于不值得解释的原因,我需要获取这些文件对象的文件路径,而不是直接对它们执行操作。 Tl;博士:我不得不花几天时间重写其他人的代码。

以下是执行此操作的最佳方式:

  1. 将对象另存为文件
  2. 获取新创建文件的文件路径
  3. do_something()
  4. 删除文件
  5. 感谢。

1 个答案:

答案 0 :(得分:2)

NamedTemporaryFile。 with块为你做了所有的清理工作,这个命名版本意味着如果你必须走得那么远,可以通过文件名将临时文件传递给其他进程。 Sorta示例(请注意,这主要是动态编码,所以这里没有工作代码的承诺)

import tempfile
def handler(inmemory_fh):
    with tempfile.NamedTemporaryFile() as f_out:
        f_out.write(inmemory_fh.read())  # or something
        subprocess.call(['/usr/bin/dosomething', f_out.name])

当withblock退出时,文件将被删除。

至于那是最好的方法吗?恩,您可以访问他们的上传代码并告诉django将其写入文件,或者您可以为它设置django设置({{3}})并查看django是否会为您执行此操作。取决于您对该文件的确切需要。