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