我有一个调用另一个网站的网络服务,允许我从中下载一个excel文件。这一直很好但用户在将其导入excel文件时遇到问题。我的任务是构建它的网络版本,但我自己也不得不停止使用该文件。
以下是强制用户下载的代码段。
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 阅读Sheets1.Cells(1,1) 插入数据库(我有这个代码) 在内存中杀死test.xls
我可以在记忆中这样做吗?
答案 0 :(得分:0)
您可以在服务器上以临时名称存储文件,然后打开OLEDB连接,读取文件并将其删除。以下是保存文件的基本示例:
假设您的缓冲区包含您阅读的文件,您可以使用类似
的内容Dim sSafeAsPath = "c:\temp\" & Path.GetRandomFileName
Dim fs = New FileStream(sSaveAsPath, FileMode.Create, FileAccess.Write)
fs.Write(buffer, 0, UBound(buffer))
fs.Close()
请注意,随机文件名用于避免冲突 - 使用该名称读取文件并在完成后将其删除。另请注意,您的应用程序需要对您将用于这些操作的文件夹进行读/写/删除访问。
了解有关如何通过OLEDB访问Excel文件的更多信息