2014-02-20 35 views
2

我從我的Django UI上傳.rpm文件。我能夠在所需位置成功上傳的文件...rpm文件大小在python上傳過程中增加(損壞)

問題: 有上傳後,並且由於這個我收到錯誤增加文件大小 - 「錯誤的包讀取頭「試圖提取的.rpm文件

下面是我用來上傳文件中的函數時:

// RPM_DIR = some DIR path where I am saveing the file" 

def save_temporarily(file, name): 

with open(os.path.join(RPM_DIR,str(name)),"wb+") as destination: 
     for chunk in file.chunks(): 
      destination.write(chunk) 
destination.closed 
f.seek(0) 
return os.path.join(RPM_DIR,str(name)) 

輸出的ls -ltr

-rw-R - R-- 1根根3748319月20 new_file.rpm(對於新上載的文件)

-rw-R - R-- 1根根3735417 2月20日的xyz .rpm(適用於原始文件)

有增加的大小...

請建議如何擺脫這個問題...... 特別是我期待的,如果可能的

以下解決方案
  1. 我們可以如何從文件中刪除多餘的字節並將其提取出來。
  2. 有沒有辦法用python上傳文件而不打開並保存到指定的位置。
  3. 爲什麼額外的字節會被追加到文件中。

編輯
我也試圖改變寫入功能

output_file_path = "/u001/Test/"+ file.name 
    result_file = open(output_file_path,"wb") 
    while True: 
     file_content = file.read(1024)    ''' or simply file.read() ''' 
     if not file_content: 
      break 
     result_file.write(file_content) 
    result_file.write(file_content) 
    result_file.close() 

我得到了相同的輸出沒有變化......我實際運行保存的.rpm文件後,下面的命令(看到details):

rpm2cpio '+str(patch_path)+' | cpio -idm 

,並得到了以下錯誤:

<open file 'rpm2cpio /u001/Test/php-5.1.4-1.esp1.x86_64.rpm | cpio -idm ', mode 'r' at 0x7f6334239030> 
error: rpm2cpio: headerRead failed: region trailer: BAD, tag 491913216 type 508690432 offset -525467648 count 542113792 
error reading header from package 
cpio: premature end of archive 

PS:這可能有助於瞭解多一點發生了什麼

感謝,

回答

0

你有沒有做一個二進制的區別:兩個文件(UNIX CMP),看看那裏的NEW_FILE .rpm被破壞?我想知道你的問題是不是超過字節,但腐敗。

Python文件對象的write()方法需要一個字符串,對於該字符串,處理可能因您的字符編碼而異。 RPM文件是二進制文件。從代碼示例中不清楚什麼類型的對象file.chunks()返回。

它可能是你需要做的是這樣這裏建議:Python how to write to a binary file?

+0

是的,你是正確的文件越來越損壞。 ** file.chunk()**返回對象的_string_類型 –

+0

我寫了下面的測試程序並且複製完美: 'import os fileName = os.path.expanduser('〜/ Downloads/somefile.rpm' ) F =開放(文件名) output_file_path = 「/ TMP /測試 - 」 + os.path.basename(f.name) result_file =開放(output_file_path, 「WB」) 而真: FILE_CONTENT = F .read(1024) 如果不是FILE_CONTENT: 突破 result_file.write(FILE_CONTENT) result_file.write(FILE_CONTENT) result_file.close()' 我懷疑你的問題將與你正在閱讀的內容有關。 – 6EQUJ5

+0

我試着改變了我正在閱讀的文件,對於其中的一些文件而言,它的一些功能失效了。我認爲你是正確的問題是我正在閱讀的文件..感謝您的努力,這真的很有用:) –