找回密码
 加入
搜索
查看: 18001|回复: 35

[网络通信] [求助]文件以二进制形式保存插入

[复制链接]
发表于 2019-8-13 13:46:04 | 显示全部楼层 |阅读模式
悬赏50金钱已解决
本帖最后由 king8462 于 2019-8-13 13:47 编辑

想借用下面的易语言代码用于post提交数据:
字节集数据 = 读入文件 (FilePath)
data = 到字节集 (#POST_UP)
data = 子字节集替换 (data, 到字节集 (“[guid]”), 到字节集 (guid), , )
data = 子字节集替换 (data, 到字节集 (“[pz]”), 到字节集 (pz), , )
data = 子字节集替换 (data, 到字节集 (“[文件名]”), 到字节集 (文本_取右边 (FilePath, “\”)), , )
data = 子字节集替换 (data, 到字节集 (“[时间]”), 到字节集 (V8取标准时间 ()), , )
data = 子字节集替换 (data, 到字节集 (“[文本数据]”), 字节集数据, , )
http.Open (“POST”, “url”)
http.SendBin (到字节集 (data), 真)


但运行下面的au3代码把exe文件插入进去后发现exe文件大小改变了,而且post后exe无法打开。不知道哪里出错了,请高手帮忙修改一下。附件为guid.txt文件
   
   $guid="wu_1di4a1i7l1mmru1n1udfp807l90"
   $pz="SF5Rc8mkQQacKUKxYK/ao8coslHrvh7dthxXFuoln40OXxqTtYb9OclvqFqgBC1z"
   $date="Tue Aug 13 2019 09:39:08 GMT 0800 (中国标准时间)"
   
   Local $file = @ScriptDir & "\guid.txt"
   $sfile=FileOpen($file)
   Local $chars = FileRead($sfile)
   $chars = StringReplace($chars,"[guid]",$guid)
   $chars = StringReplace($chars,"[pz]",$pz)
   $chars = StringReplace($chars,"[文件名]","exe测试文件.exe")
   $chars = StringReplace($chars,"[时间]",$date)
   
  $scwj=FileOpen(@ScriptDir&"\exe测试文件.exe")
  $sText= FileRead($scwj)
  FileClose(@ScriptDir&"\exe测试文件.exe")        
  $chars = StringReplace($chars,"[文本数据]",$sText)
   FileWrite(FileOpen($file,2),$chars)
   FileClose($file)

 $file=FileOpen($file,16)
 $data=FileRead($file)
  
 ;以下post代码部分省略  
 $httpObj.Open ("POST", "url")
 $httpObj.Send($data)
 $httpObj.WaitForResponse()  



附件: 您需要 登录 才可以下载或查看,没有账号?加入

最佳答案

查看完整内容

感觉被楼主带偏了,Au3 本身就可以完成全套的 Post 不说,就光当前的这个问题而言,就不应该替换完成后写入txt文本文档再读取,这样二进制文件的数据肯定已经损坏。应该直接二进制替换,然后直接Post: 这样应该OK! 没有测试,但感觉必须能成,不行来战
发表于 2019-8-13 13:46:05 | 显示全部楼层
本帖最后由 afan 于 2019-8-14 00:19 编辑

感觉被楼主带偏了,Au3 本身就可以完成全套的 Post 不说,就光当前的这个问题而言,就不应该替换完成后写入txt文本文档再读取,这样二进制文件的数据肯定已经损坏。应该直接二进制替换,然后直接Post:
$guid = "wu_1di4a1i7l1mmru1n1udfp807l90"
$pz = "SF5Rc8mkQQacKUKxYK/ao8coslHrvh7dthxXFuoln40OXxqTtYb9OclvqFqgBC1z"
$date = "Tue Aug 13 2019 09:39:08 GMT 0800 (中国标准时间)"

Local $file = @ScriptDir & "\guid.txt"
Local $chars = FileRead($file)
$chars = StringReplace($chars, "[guid]", $guid)
$chars = StringReplace($chars, "[pz]", $pz)
$chars = StringReplace($chars, "[文件名]", "exe测试文件.exe")
$chars = StringReplace($chars, "[时间]", $date)
$scwj = FileOpen(@ScriptDir & "\exe测试文件.exe", 16)
$sText = StringTrimLeft(FileRead($scwj), 2)
FileClose($scwj)
$chars = StringToBinary($chars)
$chars = StringReplace($chars, "5BCEC4B1BECAFDBEDD5D", $sText) 
$data = $chars  ;这里直接就可以拿去Post,不需要经过任何的读写操作

这样应该OK!  没有测试,但感觉必须能成,不行来战
发表于 2019-8-13 16:37:22 | 显示全部楼层
不知道是不是这个意思,没法测试
$guid = "wu_1di4a1i7l1mmru1n1udfp807l90"
$pz = "SF5Rc8mkQQacKUKxYK/ao8coslHrvh7dthxXFuoln40OXxqTtYb9OclvqFqgBC1z"
$date = "Tue Aug 13 2019 09:39:08 GMT 0800 (中国标准时间)"

Local $file = @ScriptDir & "\guid.txt"
;~ $sfile = FileOpen($file)
Local $chars = FileRead($file)
$chars = StringReplace($chars, "[guid]", $guid)
$chars = StringReplace($chars, "[pz]", $pz)
$chars = StringReplace($chars, "[文件名]", "exe测试文件.exe")
$chars = StringReplace($chars, "[时间]", $date)

$scwj = FileOpen(@ScriptDir & "\exe测试文件.exe", 16)
$sText = FileRead($scwj)
FileClose($scwj)
$chars = StringReplace($chars, "[文本数据]", $sText)
Local $hFo = FileOpen($file, 2 + 512)
FileWrite($hFo, $chars)
FileClose($hFo)

$data = FileRead($file)
 楼主| 发表于 2019-8-13 18:02:08 | 显示全部楼层
本帖最后由 king8462 于 2019-8-15 19:05 编辑
afan 发表于 2019-8-13 16:37
不知道是不是这个意思,没法测试

谢谢A版回复,测试失败。附件是完整源码,密码发私信给你。
发表于 2019-8-13 18:04:37 | 显示全部楼层
king8462 发表于 2019-8-13 18:02
谢谢A版回复,测试失败。附件是完整源码,密码发私信给你。

不看完整码,没时间搞,最多帮忙看看最简示例
 楼主| 发表于 2019-8-13 18:07:29 | 显示全部楼层
afan 发表于 2019-8-13 18:04
不看完整码,没时间搞,最多帮忙看看最简示例

代码很短的。里面的文本上传测试成功
发表于 2019-8-13 18:18:38 | 显示全部楼层
king8462 发表于 2019-8-13 18:07
代码很短的。里面的文本上传测试成功

随便看了下,你确定改了?
$scwj = FileOpen(@ScriptDir & "\exe测试文件.exe")

我上面的第13行
 楼主| 发表于 2019-8-13 18:28:27 | 显示全部楼层
afan 发表于 2019-8-13 18:18
随便看了下,你确定改了?
$scwj = FileOpen(@ScriptDir & "\exe测试文件.exe")

改了,修改后的文件明显过大,应该800kb差不多。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2019-8-13 18:32:48 | 显示全部楼层
$data = FileRead($file) 必须以$data = FileRead($file,16)字节形式读取,要不然post失败。
发表于 2019-8-13 19:02:15 | 显示全部楼层
king8462 发表于 2019-8-13 18:32
$data = FileRead($file) 必须以$data = FileRead($file,16)字节形式读取,要不然post失败。

你这句是在代码不完整的情况下我改的,鬼知道后面是做什么用? 我改那句主要是看它上一句打开了文件而没有关闭的代码,直接 FileRead 可以不用打开。
 楼主| 发表于 2019-8-13 20:06:45 | 显示全部楼层
afan 发表于 2019-8-13 19:02
你这句是在代码不完整的情况下我改的,鬼知道后面是做什么用? 我改那句主要是看它上一句打开了文件而没 ...

谢谢版主!我实在是不知道还能怎么改了
发表于 2019-8-13 20:10:27 | 显示全部楼层
不知道服务端如何接收数据创建文件的,如果生成的文件有两倍大那就是当字符串而非二进制数据处理了
 楼主| 发表于 2019-8-13 20:21:36 | 显示全部楼层
afan 发表于 2019-8-13 20:10
不知道服务端如何接收数据创建文件的,如果生成的文件有两倍大那就是当字符串而非二进制数据处理了

服务端应该就是把其他的数据裁剪掉,只保留exe读取的那部分。生成的文件应该是exe文件本身的大小加上guid.txt大小,现在生成的太大,肯定有问题 。我用易语言导出过修改后的$data数据,就是这样子的。
发表于 2019-8-13 20:25:59 | 显示全部楼层
king8462 发表于 2019-8-13 20:21
服务端应该就是把其他的数据裁剪掉,只保留exe读取的那部分。生成的文件应该是exe文件本身的大小加上guid ...

我的意思是 现在的文件是否两倍大?……
 楼主| 发表于 2019-8-13 20:29:20 | 显示全部楼层
afan 发表于 2019-8-13 20:25
我的意思是 现在的文件是否两倍大?……

是的,1.64mb,两倍了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 20:34 , Processed in 0.083037 second(s), 18 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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