回 帖 发 新 帖 刷新版面

主题:如何把截取出来二进制字节 保存为文件呢。

我用如下代码截取到字节:
<%
totalSize = Request.TotalBytes 
biData = Request.BinaryRead( totalSize )
nPosEnd  = InstrB(1, biData, ChrB(13))       '查找第一个回车所在位置
 '从第一个回车后在开始查找+2是因为字节的原因
nPosEnd2 = InstrB(nPosEnd+2 , biData, ChrB(13))   '查找第二个回车所在位置
nPosEnd3 = InstrB(nPosEnd2+2 , biData, ChrB(13))   '查找第三个回车所在位置
nPosEnd4 = InstrB(nPosEnd3+2 , biData, ChrB(13))   '查找第四个回车所在位置
nPosEnd5 = InstrB(nPosEnd4+2 , biData, ChrB(13))   '查找第五个回车所在位置
vDisposition =midb(biData,nPosEnd + 2 ,nPosEnd2-nPosEnd-2 )   '截取文件名(第一个与第二个回车之间)
vDisposition2 =midb(biData,nPosEnd2+2,nPosEnd3-nPosEnd2-2)   '截取文件格式(第二个与第三个之间)
vDisposition3 =midb(biData,nPosEnd4+2,nPosEnd5-nPosEnd4-2)   '截取文件正文(第四个与第五个之间)



Private Function CWideString(bsString)                  '字节转换字符代码
    Dim nIndex
    CWideString =""
    For nIndex = 1 to LenB(bsString)
        CWideString = CWideString &amp; Chr(AscB(MidB(bsString,nIndex,1)))  '查找没个字节并用chr转换成字符 AscB 返回首字节对应的 ANSI 字符代码
    Next
End Function
response.write nposend &amp;"<Br>"
response.write nPosEnd2&amp;"<BR>"
response.write nPosEnd3&amp;"<BR>"
response.write nPosEnd4&amp;"<BR>"
response.write nPosEnd5&amp;"<BR>"
response.write  CWideString(vDisposition)&amp;"<BR>"   
response.write  CWideString(vDisposition2)&amp;"<BR>"  
response.write  CWideString(vDisposition3)&amp;"<BR>"  
Set tmpStream = Nothing %>

截取是正确的,
因为我把一个12345的文本文档上传网页会显示12345
但是我怎么把这么一个字节文件vDisposition3保存出来成为一个文件呢.
我试着用:
Set tmpStream = Server.CreateObject("ADODB.Stream")
tmpStream.Type = 1
tmpStream.Open
tmpStream.Write vDisposition3 '将截数据 装入对像
stream.SaveToFile server.MapPath("./temp/01.txt")
但是这个没用提示错误:
错误类型:
ADODB.Stream (0x800A0BB9)
参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
/文件上传/分割二进制文件/upload.asp, 第 16 行
16行就是这句:tmpStream.Write vDisposition3 这句是把数据装载进stream中
怎么会装载不进去啊.
高手高手来求救下啊.............

回复列表 (共2个回复)

沙发

找了个正确的Set tmpStream = Server.CreateObject("ADODB.Stream")   '把数据写入到文件中
Set Stream = Server.CreateObject("ADODB.Stream")
tmpStream.Type = 1
tmpStream.Open
Stream.Type = 1
Stream.Open              '创建并打开两个stream对象
tmpStream.Write biData           '所有数据转载入对象
tmpStream.Position = nPosEnd4+1      '拷贝文件的开头位置,因为是从当前位置后一个字符开始 所以这本来是+2的变成、+1的了。
tmpStream.CopyTo stream,fenge-2-nPosEnd4-2  '拷贝文件的字节长度
Stream.SaveToFile server.MapPath("./temp/01.jpg")
但为前面那个会出错呢.
我是先把他截取出来在装载不行吗? 
谁来冒个泡好吗?

板凳

Response.Buffer = True
Response.Clear
Response.AddHeader "Content-Disposition","attachment; filename=" & 文件名称
Response.AddHeader "Content-Length",fLength
Response.CharSet = "UTF-8" 
Response.ContentType = "application/octet-stream" 
Response.BinaryWrite 二进制字节流

我来回复

您尚未登录,请登录后再回复。点此登录或注册