2012-04-12 33 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) 
相關問題