使用api下载.xlsx文件返回XML格式的文件? VB.NET

时间:2018-06-05 15:03:37

标签: excel vb.net api httpwebrequest

我正在尝试使用API​​从Web应用程序下载.xlsx文件。但是,文件的字符串内容始终是乱码的,并且似乎包含XML内容。我假设它的XML,因为它在第一行中提到了'[Content_Types] .xml'。

响应标头提到返回的内容类型是'application / octet-stream'。我尝试在我的请求标头中添加content-type =“application / vnd.openxmlformats-officedocument.spreadsheetml.sheet”,但Web应用程序“无法识别”该操作。所以我不能返回.xlsx类型的文件......

当我尝试下载此文件并将其保存为.xlsx时,我无法打开它,因为它总是说该文件已损坏。但是,使用Postman下载文件没有损坏。在下载和保存二进制64位基本编码数据时,我不确定我在哪里出错。请帮忙!这是我正在使用的代码下载和保存文件。

If My.Computer.FileSystem.DirectoryExists(DownloadLocation) = False Then
        MsgBox("Folder path '" & DownloadLocation & "' does not exist.", MsgBoxStyle.Information)
        Return
    End If

    Dim url As String = 'I am setting the URL here, tested on postman and no issues here 

使用函数从响应头获取文件名,文件路径和名称没有问题。

 Dim Filepath As String = DownloadLocation & "\" & filename.Split(".").First & "_" & Format(Now, "yyyymmdd hhmmss") & "." & filename.Split(".").Last

    Dim credentials As String = ""
    credentials = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(LoginName + ":" + PW))
    Dim Request As HttpWebRequest = DirectCast(HttpWebRequest.Create(url), HttpWebRequest)
    With Request
        .Headers.Set(HttpRequestHeader.Authorization, credentials)
        .Headers.Set("X-Application-Key", My.Settings.APIKey)
        .Method = "GET"
        .AutomaticDecompression = DecompressionMethods.GZip
    End With

    Try
        Dim response As HttpWebResponse
        response = Request.GetResponse
        Dim stream As Stream = response.GetResponseStream
        Dim reader As New StreamReader(stream)
        Dim Ofile As FileStream = New FileStream(Filepath, FileMode.Create)
        Dim Owrite As StreamWriter = New StreamWriter(Ofile)
        Owrite.Write(reader.ReadToEnd)
        reader.Close()
        Owrite.Close()
        Ofile.Close()
    Catch ex As Exception
        MsgBox("Download failed..." & vbNewLine & vbNewLine & ex.ToString, MsgBoxStyle.Information)
        Return
    End Try

该文件保存为.xlsx文件,但当我尝试打开该文件时,Excel表示该文件已损坏。有谁知道这里发生了什么?

1 个答案:

答案 0 :(得分:0)

删除GZip解压缩。首先,你不需要它。其次,它给你带来了麻烦。

XLSX文件是一组压缩成一个文件的XML文件。并重命名为.xlsx扩展名。获取任何xlsx文件,将其重命名为zip并解压缩内容。您将看到XML结构及其目录。

AutomaticDecompression可以在响应流字节中检测* ZIP,并在客户端为您解压缩。

GZipping不需要压缩内容,因为在大多数情况下压缩压缩文件会使其变大。由于消息的熵已经最大化。