高手~前辈救命啊,,,,,,我这里出现索引出错~~~也就是没有取到"file"=>>post 图片文件流到asp.net一个页面...怎么在这个页面取到正确的图片二进制流并还原......代码见内容!!!!!

andy_chenwei 2008-06-16 10:59:45
这是客户端代码vb.net
Public Function postCaptcha(ByVal strApiKey As String, ByVal strCaptchaFile As String) As String
Dim objEncoding As New System.Text.UTF8Encoding
Dim objStreamWriter As System.IO.StreamWriter
Dim objStream As System.IO.Stream
Dim objHTTPRequest As HttpWebRequest
Dim sbPostData As New System.Text.StringBuilder
Dim intUploadBit As Integer
Dim intUploadSoFar As Integer
Dim inttoUpload As Integer
Dim i As Integer
Dim objStreamReader As System.IO.Stream
Dim strResult As String

'set request properties
objHTTPRequest = System.Net.WebRequest.Create("http://localhost:1116/captcha4u/api.aspx")
objHTTPRequest.AllowAutoRedirect = True
objHTTPRequest.Accept = "*/*"
objHTTPRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
objHTTPRequest.KeepAlive = False
objHTTPRequest.Timeout = 30000
objHTTPRequest.Method = "POST"
objHTTPRequest.ContentType = "multipart/form-data; boundary=7cf2a327f01ae"

sbPostData.Append("--" + "7cf2a327f01ae" + vbCrLf)
sbPostData.Append("Content-Disposition: form-data; name=""api_key""" + vbCrLf)
sbPostData.Append(vbCrLf)
sbPostData.Append(strApiKey + vbCrLf)

sbPostData.Append("--" + "7cf2a327f01ae" + vbCrLf)
sbPostData.Append("Content-Disposition: form-data; name=""expire""" + vbCrLf)
sbPostData.Append(vbCrLf)
sbPostData.Append("1000" + vbCrLf) 'defaulted to 1000 but you can change this

sbPostData.Append("--" + "7cf2a327f01ae" + vbCrLf)
sbPostData.Append("Content-Disposition: form-data; name=""method""" + vbCrLf)
sbPostData.Append(vbCrLf)
sbPostData.Append("upload_captcha" + vbCrLf)

sbPostData.Append("--" + "7cf2a327f01ae" + vbCrLf)
sbPostData.Append("Content-Disposition: form-data; name=""rights""" + vbCrLf)
sbPostData.Append(vbCrLf)
sbPostData.Append("false" + vbCrLf) 'defaulted to false but you can change this

'this is the header for our captcha file upload
sbPostData.Append("--" + "7cf2a327f01ae" + vbCrLf)
sbPostData.Append("Content-Disposition: form-data; name=""file""; filename=""" & strCaptchaFile & "" + vbCrLf)
sbPostData.Append("Content-Type: image/pjpeg" + vbCrLf)
sbPostData.Append(vbCrLf)

'read our captch into a byte array
Dim objBinReader As New BinaryReader(File.OpenRead(strCaptchaFile))
Dim bytPhotoContents As Byte() = objBinReader.ReadBytes(objBinReader.BaseStream.Length)
objBinReader.Close()

'convert our other post data into a byte array
Dim bytPostContents As Byte() = objEncoding.GetBytes(sbPostData.ToString)

'create a footer for insertation after the file bytes are uploaded
Dim bytPostFooter As Byte() = objEncoding.GetBytes(vbCrLf + "--" + "7cf2a327f01ae" + vbCrLf)

'create a new data buffer to hold all of our byte arrays
Dim bytDataBuffer As Byte() = New Byte(bytPostContents.Length + bytPhotoContents.Length + bytPostFooter.Length) {}


'copy the contents of our three byte arrays into our single byte array
System.Buffer.BlockCopy(bytPostContents, 0, bytDataBuffer, 0, bytPostContents.Length)
System.Buffer.BlockCopy(bytPhotoContents, 0, bytDataBuffer, bytPostContents.Length, bytPhotoContents.Length)
System.Buffer.BlockCopy(bytPostFooter, 0, bytDataBuffer, bytPostContents.Length + bytPhotoContents.Length, bytPostFooter.Length)

'set the content length based on our new byte array length
objHTTPRequest.ContentLength = bytDataBuffer.Length

'get our stream and post our data
objStream = objHTTPRequest.GetRequestStream()


'chunk up our data and upload it to our stream
'will generally only need to send in one chunk unless file is large
intUploadBit = Math.Max(bytDataBuffer.Length / 100, 50 * 1024)
intUploadSoFar = 0

While i < bytDataBuffer.Length
inttoUpload = Math.Min(intUploadBit, bytDataBuffer.Length - i)
intUploadSoFar += inttoUpload
objStream.Write(bytDataBuffer, i, inttoUpload)
i = i + intUploadBit
End While

'close our stream
objStream.Close()

'get the response from the server
Dim objHTTPResponse As HttpWebResponse = CType(objHTTPRequest.GetResponse(), HttpWebResponse)
objStreamReader = objHTTPResponse.GetResponseStream()

'final result from server is returned to strResult
Dim objStreamResult As New System.IO.StreamReader(objStreamReader)
strResult = objStreamResult.ReadToEnd


'close our objects
objStreamReader.Close()
objStreamResult.Close()

Return strResult


End Function
以下为我自己在asp.net里的api.aspx.cs里取图片的代码~但是出现如题的索引报错...这是为什么啊???怎么取???
HttpPostedFile MyPostedFile = Request.Files[0];
byte[] b = new byte[MyPostedFile.ContentLength];
MyPostedFile.SaveAs(FileName);
MyPostedFile.InputStream.Flush();
MyPostedFile.InputStream.Close();

以下代码报错..."索引超出范围。必须为非负值并小于集合大小。参数名: index"
HttpPostedFile MyPostedFile = Request.Files[0];
...全文
59 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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