Загрузить файл .xlsx с помощью API возвращает файл в формате XML?VB.NET - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь загрузить файл .xlsx из веб-приложения с помощью API.Тем не менее, строковое содержимое файла всегда шифруется и, похоже, содержит XML-содержимое.Я предполагаю, что это XML, поскольку в первой строке упоминается «[Content_Types] .xml».

В заголовках ответа указывается, что возвращаемый тип контента - «application / octet-stream».Я попытался добавить content-type = "application / vnd.openxmlformats-officedocument.spreadsheetml.sheet" в заголовки моего запроса, но веб-приложение "не распознало операцию".Поэтому я не могу вернуть файлы типа .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 голосов
/ 05 июня 2018

Удалить декомпрессию GZip.Во-первых, вам это не нужно.Во-вторых, это вызывает у вас эту проблему.

XLSX-файл представляет собой набор XML-файлов, заархивированных в один файл.И переименован в расширение .xlsx.Возьмите любой из ваших файлов xlsx, переименуйте его в zip и распакуйте содержимое.Вы увидите структуру XML и ее каталоги.

AutomaticDecompression, вероятно, обнаружит * ZIP в байтах потока ответа и разархивирует его для вас на стороне клиента.

GZipping Сжатое содержимое не требуется, потому что сжатие сжатого файла в большинстве случаев делает его более длинным.Поскольку энтропия сообщения уже максимальна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...