我用asp.net做一个图片分段上传的程序,读取request包含的所有data,然后进行处理,从中得出图片的二进制数据,保存。发现一个问题,就是request.binaryread读出所有数据后,保存在服务器一个txt上,检查这个txt,发现有的时候不完整(没有读取完)。具体是这样的:
像下面这么写,一次性上传并保存,是没问题的:
dim bidata
dim svr
svr=server.createObject("adodb.stream")
svr.mode=3
svr.type=1
svr.open()
biData=request.binaryread(request.totalbytes)
svr.write(biData)
svr.saveToFile(appDomai.currentDomain.basedirectory & "gaga.txt",2)
但我把request分段读取,即
dim chunk=1024
dim rededbytes=0
Do while readedbytes if readedbyte+1024>request.totalbytes then
chunk=request.totalbytes-readedbytes
end if
bidata=request.binaryread(chunk)
svr.write(bidata)
readedbytes=readedbytes+chunk
loop
svr.savetofile(appdomain.currentdomain.basedirectory & "gaga.txt",2)
这种情况下,打开gaga.txt,发现request的后边的数据不完整。缺少后边很大一部分数据,特别是最后的分隔符等信息:
-----------------------------7df1425105a6
Content-Disposition: form-data; name="uploadrr"
我在本地机器(win10)localhost做的,上传后写入的txt就很完整,程序上传到服务器(window server2012),上传文件后写入的txt中就不完整。请教高手指点!
"adobd.stream"拼错了。
而且你这是asp还是asp.net。你这是vb.net?
用的是asp.net, adodb拼错了,不好意思,这是在打字的时候打错了,程序中没有写错。程序运行没有问题,在localhost运行能够上传图片,分段读取,并完整地写入硬盘。问题是在window server2012上面运行的时候,如果一次性读取并保存,也是没有问题的,
即biData=request.binaryread(request.totalbytes)
svr.write(biData)
svr.saveToFile(appDomai.currentDomain.basedirectory & "gaga.txt",2)
这在服务器上也是没有问题的。
但是在window 2012 server服务器上,如果分段读取到一个byte数组中, 调用adodb stream对象的write方法分段写入,再保存为txt,检查后发现,保存了上传的request信息,但应有的request信息不完整。
很奇怪,因为在win10的localhost没有问题。