2012-04-12 56 views
1
def _tarFiles(filepaths): 
print "create tar file from all files in file list and save to temp working dir. returns tarfile path " 
try: 
    savePathDir = settings.TAR_FILE_TARGET_DIRECTORY 
    if not os.path.exists(savePathDir): 
     os.makedirs(savePathDir) 

    tarredfiles = tarfile.open(settings.TAR_FILE_TARGET_DIRECTORY + '/' + 'responsefiles.tar',mode='w') 
    for f in filepaths: 
     tarredfiles.add(f) 

    tarredfiles.close() 
    return ("Ok", settings.TAR_FILE_TARGET_DIRECTORY + '/' + 'responsefiles.tar') 

except Exception as e: 
    return ("Error in "+ inspect.stack()[0][3] + " " + e.message, None) 

def sendFiles(files): 
    try: 
     result, tarfilename = _tarFiles(files) 
     if result == 'Ok': 
      try: 
       print tarfilename 
       wrapper = FileWrapper(file(tarfilename)) 
       response = HttpResponse(wrapper, content_type='application/x-tar') #zip,avi,png,jpeg, etc... 
       response['Content-Disposition'] = 'attachment; filename=' + tarfilename#tarredfiles.name #eg. myfile.zip 
       response['Content-Length'] = str(os.path.getsize(tarfilename)) 
       return ("Ok",response) 
      except Exception as e: 
       return ("Error in "+ inspect.stack()[0][3] + " " + e.message, None) 

     else: 
      return (result,None) 

    except Exception as e: 
     return ("Error in "+ inspect.stack()[0][3] + " " +e.message,None) 

tarfilename是文件的完整路径。 内容长度看起来不错(将实际文件与getsize比较)。django提供的文件在windows上返回空,不在mac上

适用于运行runserver的mac。在运行runserver的窗口上返回部分文件。或者如果我在窗口上单步执行,则完全清空文件。

产生的目标目录和文件名是“tarred_files/responsefiles.tar” 文件大小为90K并返回os.path.getsize是92160

我在做什么,会导致一个空文件是下载?

+0

“我在做什么,它会造成空文件被下载?“如果_tarFiles的结果不是“Ok”,则返回None。我敢打赌,_tarFiles在Windows上失败。你可以粘贴该功能的代码吗? – 2012-04-12 21:17:53

+0

当然,但我在调试中走过,它正在经历......我将再次检查! – michael 2012-04-12 21:20:25

+0

是的,它会返回填充内容标题的响应(正确?) – michael 2012-04-12 21:28:41

回答

2

对于windows,您需要在文件中添加“rb”。

像这样:

wrapper = FileWrapper(file(tarfilename,'rb')) 

此外,内容长度应该用一个整数,而不是字符串

像这样:

response['Content-Length'] = os.path.getsize(tarfilename) 
相关问题