VB.NET从远程站点下载文件并在内存中操作

时间:2015-03-23 18:09:03

标签: asp.net vb.net excel

我有一个调用另一个网站的网络服务,允许我从中下载一个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

我可以在记忆中这样做吗?

1 个答案:

答案 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()

请注意,随机文件名用于避免冲突 - 使用该名称读取文件并在完成后将其删除。另请注意,您的应用程序需要对您将用于这些操作的文件夹进行读/写/删除访问。

您可以在Connectionstrings.com

了解有关如何通过OLEDB访问Excel文件的更多信息