在python中上传期间.rpm文件大小增加(损坏)

时间:2014-02-20 11:40:35

标签: python django python-2.7 file-upload rpm

我正在从我的Django UI上传 .rpm 文件。我能够在所需的位置成功上传文件..

问题: 上传后文件大小有所增加,因此我在尝试提取 .rpm 文件时遇到错误 - “从包中读取标题错误 / p>

以下是我用来上传文件的功能:

// 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 root root 3748319 2月20日new_file.rpm(对于新上传的文件)

-rw-r - r-- 1 root root 3735417 Feb 20 xyz.rpm(原始文件)

尺寸有所增加......

请建议如何摆脱这个问题...... 特别是我正在寻找以下解决方案

  1. 我们可以从文件中删除多余的字节并将其解压缩。
  2. 有没有办法在python中上传文件而不打开并将其保存到指定位置。
  3. 为什么要将额外的字节附加到文件中。
  4. 修改
    我也尝试将写入功能改为

        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:这可能有助于更多地了解正在发生的事情

    谢谢,

1 个答案:

答案 0 :(得分:0)

你是否完成了两个文件的二进制差异(unix:cmp)以查看new_file.rpm被破坏的位置?我想知道你的问题是不是多余的字节而是腐败。

Python文件对象write()方法接受一个字符串,根据您的字符编码,处理可能会有所不同。 RPM文件是二进制的。从您的代码示例中不清楚file.chunks()返回什么类型的对象。

您可能需要执行此处建议的操作:Python how to write to a binary file?