zoukankan      html  css  js  c++  java
  • .net 在内存中解压Zip并修改再打包

    最近做个组件,需要从服务器端获取一个zip包(是一些实体元数据及配置方案的资源包),然后将zip包中的配置文件修改后重新上传发布。

    开始时,我直接用Package类读取内存中获取的zip包数据,然后读取包中的一个xml文件,修改它的内容,然后写回流,结果无法导回系统(系统不认这个包)。

    是不是文件损坏?我把修改完的数据流输出为一个zip文件,打开查看:文件内容正确,看上去一切正常,用WINDOWS系统将文件手动导进系统——我靠!能导进,说明文件无损坏,zip文件保存得似乎也没有问题。

    那是啥原因?难道Package类(实际它默认是用ZipPackage来实例化)解压和压缩算法和服务器的不一样?同样的几个文件,我用Package类进行zip打一个包,然后用windows自带的zip打另打一个包,两个文件大小的确有差异,windows自带的zip打包功能似乎算法更好,能更省些空间。但这个不重要了,我重新用Package做解压和压缩,但这次不是在内存里,而是输出为文件进行操作,一切正常,修改后打包能导进系统,说明系统还是认这个Package压缩好的包的。

    猜想直接在PackagePart的流在内存中读后修改直接写回的话好像会产生问题,于是后来解决办法是,先将内存A中的zip包中的文件先解压到内存B中,在B中修改完成后,再压缩到内存C中,然后上传C内存流里的包,一切正常!

  • 相关阅读:
    Docker常用基础命令详解
    Docker安装教程(超详细)
    IDEA 新建 Java 项目 (图文讲解, 良心教程)
    SpringBoot2.0之@Configuration注解
    idea的安装和无限期试用
    vue 取消上次请求
    calc()使用通用的数学运算规则,但是也提供更智能的功能:
    pdfh5 移动端 查看pdf
    Git处理Failed to connect to www.google.com port 80: Timed out
    对象排序
  • 原文地址:https://www.cnblogs.com/bcszz/p/2455362.html
Copyright © 2011-2022 走看看