用于处理 .zip 的 HTTP 处理程序



我有一个处理程序可以完美地处理单个文件(基于文本)。我可以接收.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 方法将它们全部写出来。

我会继续探索,但任何指导都会很棒!

我刚刚解决了这个问题。我只需要把它写成一个字节数组,并保存一个整数来表示字节数。然后只需打印内容即可。看起来我试图让事情变得更复杂。

我在原始代码中的循环有点丑陋:(

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

最新更新