У меня есть веб-служба, которая вызывает другой веб-сайт, который позволяет мне загрузить из него файл excel. Это идет хорошо, но у пользователей возникает проблема с импортом в файл excel. Мне было поручено создать веб-версию, но я сам застрял в использовании файла.VB.NET Загрузить файл с удаленного сайта и манипулировать в памяти
Вот фрагмент кода, в котором я принудительно загружаю пользователя.
Dim fileName As String
fileName = "test.xls"
Dim stream As Stream = Nothing
Dim bytesToRead As Integer = 10000
Dim buffer As Byte() = New [Byte](bytesToRead - 1) {}
Try
Dim fileReq As HttpWebRequest = DirectCast(HttpWebRequest.Create(strURL), HttpWebRequest)
fileReq.Method = "GET"
fileReq.CookieContainer = LoginCookie
fileReq.ContentType = "application/x-www-form-urlencoded"
fileReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)"
Dim fileResp As HttpWebResponse = DirectCast(fileReq.GetResponse(), HttpWebResponse)
If fileReq.ContentLength > 0 Then
fileResp.ContentLength = fileReq.ContentLength
End If
stream = fileResp.GetResponseStream()
Dim resp = HttpContext.Current.Response
resp.ContentType = "application/vnd.ms-excel"
resp.AddHeader("Content-Disposition", "attachment; filename=""" & fileName & """")
resp.AddHeader("Content-Length", fileResp.ContentLength.ToString())
Dim length As Integer
Do
If resp.IsClientConnected Then
length = stream.Read(buffer, 0, bytesToRead)
resp.OutputStream.Write(buffer, 0, length)
resp.Flush()
buffer = New [Byte](bytesToRead - 1) {}
Else
length = -1
End If
Loop While length > 0
Finally
If stream IsNot Nothing Then
stream.Close()
End If
End Try
То, что я хотел бы сделать это вместо resp.Flush, я хотел бы сказать что-то вдоль линии
Открыть test.xls в памяти Read Sheets1.Cells (1,1) Вставить в DB (у меня есть этот код) kill test.xls в памяти
Могу ли я сделать это в памяти?
Вы можете сохранить файл под именем темп на сервере, а затем открытое соединение OLEDB к нему. Затем вы можете запускать стандартные SQL-запросы, такие как SELECT, для чтения данных, например, DataTable, и манипулировать любым способом, который вы хотите. –
У вас есть образец кода или ссылка для локального сохранения файла на сервере? – JuniorFlip
Я положил это в свой ответ –