2010-08-09 77 views
3

从UI上传文件后,如何使用/ opt/files /中的当前时间戳创建新目录,并将上传的zip文件复制到此目录,然后将zip文件解压缩新目录和可变上传时使用django创建目录

def upload_info(request): 
    if request.method == 'POST': 
     file=request.FILES['file'] 
     dir = "/opt/files" 
     file_name = "%s/%s" % (dir, file.name) 
     form = UploadFileForm(request.POST, request.FILES) 
     try: 
      handle_uploaded_file(file_name , file) 

def handle_uploaded_file(file_name,f): 
    destination = open(file_name, 'wb+') 
    for chunk in f.chunks(): 
     destination.write(chunk) 
    destination.close() 
    return 

回答

8

保持新的目录名创建一个目录可以使用Python的os模块(见documentation)来实现。例如:

import os 
from datetime import datetime 
dirname = datetime.now().strftime('%Y.%m.%d.%H.%M.%S') #2010.08.09.12.08.45 
os.mkdir(os.path.join('/opt/files', dirname)) 

您可以使用os.renamedocumentation)移动为您选择的文件(前提是你有必要的权限)。解压缩可以通过命令行使用Subprocesses或使用Python module(使用gzip模块的示例可以找到here)完成。

+0

如果该目录已经存在,怎么办?它会覆盖现有的还是只是抛出“文件存在”错误? – teewuane 2014-08-31 17:57:27

+0

@teewuane如果它已经存在,它会抛出一个错误。 ['os.makedirs'](https://docs.python.org/3/library/os.html#os.makedirs)会创建丢失的父目录,而在Python 3.2中,可以使用'ok_exists = True'来如果目录已经存在,请避免错误。 – Flimm 2016-10-20 14:09:01

0

这里有一个功能我用:

def makedirs(path): 
    try: 
     os.makedirs(path) 
    except OSError as e: 
     if e.errno == 17: 
      # Dir already exists. No biggie. 
      pass