繁体   English   中英

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

[英].rpm file size increased (getting corrupted) during upload in python

我正在从Django UI上传一个.rpm文件。 我可以在所需位置成功上传文件。

问题:上传后文件大小增加,由于这个原因,我在尝试提取该.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 2月20日new_file.rpm(用于新上传的文件)

-rw-r--r-- 1个根目录3735417 2月20日xyz.rpm(对于原始文件)

尺寸增加了...

请提出如何解决此问题的建议...特别是,如果可能,我正在寻找以下解决方案

  1. 我们能否通过一些方法从文件中删除多余的字节并提取出来。
  2. 有没有一种方法可以在python中上传文件而无需打开并将其保存到指定位置。
  3. 为什么多余的字节被追加到文件中。

编辑
我也尝试将write函数更改为

    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文件后,我实际上正在运行以下命令( 有关详细信息,请参见 ):

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

谢谢,

您是否对两个文件做了二进制差异(unix:cmp),以查看new_file.rpm损坏的地方? 我想知道您的问题是否不是多余的字节而是损坏。

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

可能您需要执行此处建议的操作: Python如何写入二进制文件?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM