无组件上传时form表单传递的是纯二进制串吗?

tuhuolongan 2011-02-28 08:30:34
这是我实验的代码
<form action="index.asp" method="post" enctype="multipart/form-data" >
<input name="a" type="text" /><br />
<input name="b" type="file" /><br />
<input type="submit" />
</form>

<%
dim st,tot,fstream
tot=request.TotalBytes
st=request.BinaryRead(tot)
if tot>0 then
'response.BinaryWrite(st)
set fstream=server.CreateObject("adodb.stream")
fstream.type=1
fstream.mode=3
fstream.open
fstream.write st
'fstream.loadfromfile "D:/my web/_a/upload_t/1.jpg"
response.BinaryWrite fstream.read
end if
%>

在一篇关于介绍无组件上传原理的文章中说,“当form的enctype属性设置为multipart/form-data时上传的数据是一个长长的二进制字符串”但是自己实验时发现设置enctype="multipart/form-data"后得到form提交的数据直接用response.write()是可以显示出乱码的但是将request.write()放入stream用response.binarywrite fstream.read却报Response 对象, ASP 0106 (0x80020005)遇到未处理的数据类型。我想是不是因为表单传来的并不是完全的二进制数据 比如文件路径之类的在response.BinaryWrite()显示时是可以直接显示出字符的。正是因为数据中包含了字符串才导致了response.BinaryWrite fstream.read报错吧?
所以我理解为当form设置为enctype="multipart/form-data"后提交的是二进制与字符串的混合。不知道这样理解对不对。
另w3c中对enctype的multipart/form-data属性的解释为(不对字符编码。在使用包含文件上传控件的表单时,必须使用值。)
...全文
195 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcwtitxu 2011-02-28
  • 打赏
  • 举报
回复
fstream.write st
fstream.Position = 0
tuhuolongan 2011-02-28
  • 打赏
  • 举报
回复
<form action="index.asp" method="post" enctype="multipart/form-data" >
<input name="a" type="text" /><br />
<input name="b" type="file" /><br />
<input type="submit" />
</form>

<%
dim st,tot,fstream
tot=request.TotalBytes
st=request.BinaryRead(tot)
if tot>0 then
'response.BinaryWrite(st)
set fstream=server.CreateObject("adodb.stream")
fstream.type=1
fstream.mode=3
fstream.open
fstream.write st
'fstream.loadfromfile "D:/my web/_a/upload_t/1.jpg"
response.BinaryWrite fstream.read
end if
%>


那我就不明白了 为啥response.BinaryWrite fstream.read
就会报错呢?
hongmei85 2011-02-28
  • 打赏
  • 举报
回复
其它字符信息,如文件名信息等,也被编成二进制,并用一定的字符分隔,如ChrB (13) & ChrB (10)等

无组件上传里面,可以把这些字符从二进制转换出来

代码下载链接: https://pan.quark.cn/s/b27638adc362 在工业自动化监控领域中,WinCC 被视为一种常用的可视化软件,其功能在于构建人机界面(HMI)以及SCADA系统。本资料将阐释在WinCC环境下如何构建一个展现管道中流体流动的动态效果,此功能主要通过C动作脚本来完成。在此过程中,我们需要构建两个矩形,分别标记为 rec1 和 rec2。这两个矩形的高度相等,但 rec1 的宽度要小于 rec2。在具体实施,rec1 将作为展示流体运动的可见单元,而 rec2 则作为辅助元素,尽管其“显示”属性被设为关闭,但在程序执行期间,其属性参数对流体动画的表现起着决定性作用,因为 rec2 与 rec1 的宽度差将决定流体每次移动的长度。 随后,我们需要将 rec1 和 rec2 整合为一个自定义对象。在自定义对象的属性配置中,应包含 rec1.Left、rec1.Width、rec1.Visible 和 rec2.Width 这些核心属性。这些属性将有助于在C脚本中精确控制对象的位置和可见状态,以达成流体运动的视觉效果。同,用户可根据实际需求增加其他属性,以增强自定义对象的功能性。 在自定义对象的C脚本部分,我们设定了一个周期为“250ms”的触发器。该脚本的核心职责是计算并更新流体块的位置。借助 GetPropBOOL、GetPropWord 和 GetLeft 函数,我们可以获取对象的当前状态,涵盖其可见性、位置及宽度等参数。在循环操作中,流体块(rec1)将向右移动 rec2 - rec1 的距离,一旦流体块移出显示范围(即 rec1 的右边界达到或超过 rec2 的左边界),它将重新回到起始位置,从而形成流体持续流动的模...

28,403

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧