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
我在做什么,会导致一个空文件是下载?
“我在做什么,它会造成空文件被下载?“如果_tarFiles的结果不是“Ok”,则返回None。我敢打赌,_tarFiles在Windows上失败。你可以粘贴该功能的代码吗? – 2012-04-12 21:17:53
当然,但我在调试中走过,它正在经历......我将再次检查! – michael 2012-04-12 21:20:25
是的,它会返回填充内容标题的响应(正确?) – michael 2012-04-12 21:28:41