0

我有一个处理程序可以完美地处理单个文件(基于文本)。我可以接收 .zip 文件,但由于“损坏”错误而无法访问它们。我知道这是由于以文本流而不是字节数组的形式读取内容,但我无法弄清楚。(我的尝试如下)

编辑:我需要能够让处理程序接受 .zips 而不会出现损坏错误。我克服了损坏错误,但下面的代码处理文件时没有损坏问题,但解压后没有文件。

    Sub ProcessRequest(ByVal context as HttpContent) Implements IHTTPHandler.ProcessRequest

    Try
    If Context.Request.HttpMethod() = "POST" Then
    context.Response.ContentType = "application/octet-stream"
    context.Response.StatusCode = 204
    Dim reader as New System.IO.BinaryReader(context.Request.InputStream)
    Dim contents as Byte
    Dim int as Integer = reader.Basestream.Length

 ''Problem has got to be here, This loop structure can't be right..
    Do While int > 0
    contents = reader.readByte()
    System.IO.File.WriteAllText("thisismyoutputdirectory"), filename), contents)
    Loop
        else
    ''Handle non post cases
    end if

    Catch ex as Exception
    ''Error Handling is here
    End Try

    End Sub

而不是Streamreader我使用BinaryReader. 我试图将内容保存为字节数组,然后使用该WriteAllBytes方法将它们全部写出来。

我将继续进行实验,但任何指导都会很棒!

4

1 回答 1

0

我刚刚解决了这个问题。我只需要将其写入字节数组并保存一个整数来表示字节数。然后简单地打印内容。看起来我试图让事情变得更复杂。

我在原始代码中的循环有点难看:(

Sub ProcessRequest(ByVal context as HttpContext) Implements IHttpHandler.ProcessRequest

Try

   ''If the handler receives a POST requent then perform these actions    
    If context.Request.HttpMethod() = "POST" Then
      context.Response.ContentType = "application/octet-Stream"
      context.Response.StatusCode = 204
      ''Get the filename out of the requests header
      Dim filename as String = context.Request.Header("filename")
      ''Get the numbytes for the .zip and save them as a byte array
      Dim numbytes as Integer = reader.BaseStream.Length
      Dim contents() as Byte = reader.ReadBytes(numbytes)
     ''Write the byte array out to the file
     System.IO.File.WriteAllBytes("This/is/my/path/" & filename, contents)
    else
    '' Handle has no work to do since request was not a POST
    End if

    Catch
    ''Error Handling is here
    End Try
于 2012-09-21T11:58:43.733 回答