明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7187|回复: 18

[源码] 近期论坛附件(图片)下载后文件损坏的解决方法

  [复制链接]
发表于 2020-10-18 17:06:32 | 显示全部楼层 |阅读模式
本帖最后由 tryhi 于 2020-10-19 10:06 编辑

mokson发现的问题所在http://bbs.mjtd.com/thread-182456-1-1.html


这些打不开的图片或附件之中,在首行文件头都加入了一个“0D 0A”这两个字节,因此本论坛出现这种情况: jpg,gif,png 等图片不能正确显示,下载的全部压缩附件也打不开,解压提示错误信息。

用十六进制编辑器可以去除前面两个字节来恢复,或者使用下面lsp程序来处理下载后的文件,处理后会在原理目下生成同名+new名称的文件



(vl-Load-COM)
(defun try-file-ReadBinary (FileName / node size str stream xmldom)
        (setq xmldom (vlax-create-object "Microsoft.XMLDOM"))
        (setq node (vlax-invoke-method xmldom 'CreateElement "binary"))
        (vlax-put-Property node 'DataType "bin.hex")
        (setq stream (vlax-create-object "ADODB.Stream"))
        (vlax-put-Property stream 'type 1)
        (Vlax-Invoke stream 'open)
        (vlax-invoke-method
                stream
                'LoadFromFile
                FileName
        )
        (setq size(vlax-get-Property stream 'size))
        (vlax-put-Property node 'NodeTypedValue (Vlax-Invoke-Method stream 'Read size))
        (Vlax-Invoke-Method stream 'close)
        (setq str (vlax-get-Property node 'text))
        (vlax-release-object xmldom)
        str
)
(defun try-file-WriteBinary (file str / node stream xmldom)
        (setq xmldom (vlax-create-object "Microsoft.XMLDOM"))
        (setq node (vlax-invoke-method xmldom 'CreateElement "binary"))
        (vlax-put-Property node 'DataType "bin.hex")
        (vlax-put-Property node 'Text str)
        (setq stream (vlax-create-object "ADODB.Stream"))
        (vlax-put-Property stream 'type 1)
        (Vlax-Invoke stream 'open)
        (vlax-invoke-method stream 'write
                (vlax-get-Property node 'NodeTypedValue)
        )
        (vlax-invoke-method stream 'saveToFile file 2)
        (Vlax-Invoke-Method stream 'close)
        (vlax-release-object xmldom)
        (vlax-release-object stream)
)
(defun c:tt (/ file h16 h16-2 newfile)
        (setq file(getfiled "选择一个文件" "" "*" 0))
        (or file (exit))
        (setq
                h16(try-file-ReadBinary file)
                h16-2(substr h16 5)
        )
        (setq newfile (strcat(vl-filename-directory file)"\\"(vl-filename-base file)"_new"(vl-filename-extension file)))
        (try-file-WriteBinary newfile h16-2)
        (princ(strcat"\n处理完成,生成新文件"newfile))(princ)
)



评分

参与人数 8明经币 +8 金钱 +56 收起 理由
gzsod + 1 + 6 大佬历害666
urings + 1 赞一个!
004 + 1 神马都是浮云
执骨哟 + 1 很给力!
jh1005 + 1 很给力!
USER2128 + 1 很给力!
songyujie928 + 1 很给力!
gaics + 1 + 50 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-9-2 14:49:57 | 显示全部楼层
liufii 发表于 2021-8-26 09:33
复制上面的内容后运行提示输入的字符串有缺陷。

那是因为你用win10 记事本,默认编码 要改为 ANSI 的方式
发表于 2021-9-9 20:39:04 | 显示全部楼层
alexmai 发表于 2021-9-2 14:49
那是因为你用win10 记事本,默认编码 要改为 ANSI 的方式

多谢,确实是这个问题!
发表于 2020-10-18 19:32:23 | 显示全部楼层
复制上面的内容后运行提示输入的字符串有缺陷。不过提供的方法挺实用,谢谢楼主分享

点评

有一个斜杠被吃了,已修改  发表于 2020-10-18 20:53

评分

参与人数 1明经币 +1 收起 理由
tryhi + 1 有一个斜杠被吃了,已修改

查看全部评分

发表于 2020-10-18 20:31:29 | 显示全部楼层
我以为是我电脑出问题了呢!

评分

参与人数 1明经币 +1 收起 理由
tryhi + 1

查看全部评分

发表于 2020-10-19 08:46:47 | 显示全部楼层
海哥你也太牛逼了吧
发表于 2020-10-19 09:13:13 | 显示全部楼层
期待早日恢复正常!!!
发表于 2020-10-20 10:47:25 | 显示全部楼层
本应该是管理员给论坛打补丁,
但是海大师厉害,能给文件打补丁
发表于 2020-10-22 11:43:23 | 显示全部楼层
海哥将 lisp 玩弄于掌心之中,出神入化。膜拜!
发表于 2020-10-22 12:01:13 | 显示全部楼层
谢谢! 海大师  
发表于 2020-10-22 16:56:18 | 显示全部楼层
mobai膜拜 请问现在论坛附件还是那个问题吗?
发表于 2020-10-23 10:27:41 | 显示全部楼层
还没解决吗,好像病毒一样
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-23 02:17 , Processed in 0.198982 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表