Usuário com melhor resposta
pegando arquivo que está no banco e salvando no pc

Pergunta
-
olá!
tenho um arquivo .htm que está zipado dentro do banco no campo blob(ou seja esta .zip)
eu preciso pegá-lo desse campo e coloca-lo em algum diretorio ai depois eu vou chamar uma função minha aqui que eu tenho que descompacta e abre ele.
mas o que nao sei mesmo é como pegar o arquivo do banco e copiar para algum diretorio por exemplo c:
useis uns codigos aqui em vb mas só serve para ler o arquivo:
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim con As New FbConnection("Server=192.168.0.103;User=SYSDBA;Password=masterkey;Database=C:\DOCS.GDB")
Dim da As New FbDataAdapter("SELECT PPRA.DOCSPPRA FROM PPRA where PPRA.idppra = 2", con)
Dim MyCB As FbCommandBuilder = New FbCommandBuilder(da)
Dim ds As New DataSet()
con.Open()
da.Fill(ds, "PPRA")
Dim myRow As DataRow
myRow = ds.Tables("PPRA").Rows(0)
Dim MyData() As Byte
MyData = myRow("DOCSPPRA")
Response.Buffer = True
Response.ContentType = "Image/JPEG"
Response.BinaryWrite(MyData)
MyCB = Nothing
ds = Nothing
da = Nothing
con.Close()
con = Nothing
End Sub
alguma ideia?
Respostas
-
consegui
fiz uma função que pega o arquivo do banco e joga num diretorio:
private void LerArquivo(string DestFilePath)
{
try
{
int PictureCol = 0; // the column # of the BLOB field
FbCommand cmd = new FbCommand("SELECT", Doc);
Doc.Open();
FbDataReader dr = cmd.ExecuteReader();
dr.Read();
Byte[] b = new Byte[(dr.GetBytes(PictureCol, 0, null, 0, int.MaxValue))];
dr.GetBytes(PictureCol, 0, b, 0, b.Length);
dr.Close();
Doc.Close();
System.IO.FileStream fs =
new System.IO.FileStream(DestFilePath, System.IO.FileMode.Create, System.IO.FileAccess.Write);
fs.Write(b, 0, b.Length);
fs.Close();
}
catch
{
Session["Erro"] = "Erro";
Response.Redirect("~/Paginas/Home.aspx");
}
}
e outra que le este arquivo e abre:
private void AbreArquivo()
{
string caminho = @"C:\PG.htm";
FileInfo file = new FileInfo(caminho);
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.WriteFile(file.FullName);
Response.End();
}- Marcado como Resposta Levi DomingosModerator terça-feira, 1 de novembro de 2011 14:49
-
Giovanni, bom dia.
Não sei se já conseguiu resolver, se não conseguiu.....
tenho um aplicativo bem similar que desenvolvi....--> Quanto ao diretório:
Primeiro criei um teste para verificar se existe a pasta... estou salvando dentro do "C:\temp"
Public
Sub
TestarPasta()
If Directory.Exists(Directory.GetDirectoryRoot("%systemroot%") & "\temp") = True
Then
Pasta =
Directory.GetDirectoryRoot("%systemroot%") &
"\temp"
Else
Directory.CreateDirectory(Directory.GetDirectoryRoot("%systemroot%") & "\temp"
)
Pasta =
Directory.GetDirectoryRoot("%systemroot%") &
"\temp"
End
If
End
Sub
--> Quanto a buscar o arquivo:
Após criar a consulta e a conexão, conforme você criou, utilizei a função abaixo para fazer download para a pasta...
conection.Open()
da.Fill(ds,
"T_Anexos"
)
Dim myRow As
DataRow
myRow = ds.Tables(
"T_Anexos"
).Rows(0)
Dim MyData() As
Byte
MyData = myRow(
"Anexo"
)
Dim K As
Long
K = UBound(MyData)
Dim fs As New FileStream(Pasta & "/"& "COLOQUE AQUI A VARIAVEL COM O NOME DO ARQUIVO E EXTENSÃO" , FileMode.OpenOrCreate, FileAccess
.Write)
fs.Write(MyData, 0, K)
fs.Close()
fs =
Nothing
MyCB =
Nothing
ds =
Nothing
da =
Nothing
conection.Close()
Se achar relevante para o que está fazendo, utilizo a função abaixo para abrir o arquivo que foi baixado:
Dim
& "VARIAVEL COM O NOME DO ARQUIVO"
System.Diagnostics.
Espero que ajude.
- Marcado como Resposta Levi DomingosModerator terça-feira, 1 de novembro de 2011 14:49
Todas as Respostas
-
consegui
fiz uma função que pega o arquivo do banco e joga num diretorio:
private void LerArquivo(string DestFilePath)
{
try
{
int PictureCol = 0; // the column # of the BLOB field
FbCommand cmd = new FbCommand("SELECT", Doc);
Doc.Open();
FbDataReader dr = cmd.ExecuteReader();
dr.Read();
Byte[] b = new Byte[(dr.GetBytes(PictureCol, 0, null, 0, int.MaxValue))];
dr.GetBytes(PictureCol, 0, b, 0, b.Length);
dr.Close();
Doc.Close();
System.IO.FileStream fs =
new System.IO.FileStream(DestFilePath, System.IO.FileMode.Create, System.IO.FileAccess.Write);
fs.Write(b, 0, b.Length);
fs.Close();
}
catch
{
Session["Erro"] = "Erro";
Response.Redirect("~/Paginas/Home.aspx");
}
}
e outra que le este arquivo e abre:
private void AbreArquivo()
{
string caminho = @"C:\PG.htm";
FileInfo file = new FileInfo(caminho);
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.WriteFile(file.FullName);
Response.End();
}- Marcado como Resposta Levi DomingosModerator terça-feira, 1 de novembro de 2011 14:49
-
Giovanni, bom dia.
Não sei se já conseguiu resolver, se não conseguiu.....
tenho um aplicativo bem similar que desenvolvi....--> Quanto ao diretório:
Primeiro criei um teste para verificar se existe a pasta... estou salvando dentro do "C:\temp"
Public
Sub
TestarPasta()
If Directory.Exists(Directory.GetDirectoryRoot("%systemroot%") & "\temp") = True
Then
Pasta =
Directory.GetDirectoryRoot("%systemroot%") &
"\temp"
Else
Directory.CreateDirectory(Directory.GetDirectoryRoot("%systemroot%") & "\temp"
)
Pasta =
Directory.GetDirectoryRoot("%systemroot%") &
"\temp"
End
If
End
Sub
--> Quanto a buscar o arquivo:
Após criar a consulta e a conexão, conforme você criou, utilizei a função abaixo para fazer download para a pasta...
conection.Open()
da.Fill(ds,
"T_Anexos"
)
Dim myRow As
DataRow
myRow = ds.Tables(
"T_Anexos"
).Rows(0)
Dim MyData() As
Byte
MyData = myRow(
"Anexo"
)
Dim K As
Long
K = UBound(MyData)
Dim fs As New FileStream(Pasta & "/"& "COLOQUE AQUI A VARIAVEL COM O NOME DO ARQUIVO E EXTENSÃO" , FileMode.OpenOrCreate, FileAccess
.Write)
fs.Write(MyData, 0, K)
fs.Close()
fs =
Nothing
MyCB =
Nothing
ds =
Nothing
da =
Nothing
conection.Close()
Se achar relevante para o que está fazendo, utilizo a função abaixo para abrir o arquivo que foi baixado:
Dim
& "VARIAVEL COM O NOME DO ARQUIVO"
System.Diagnostics.
Espero que ajude.
- Marcado como Resposta Levi DomingosModerator terça-feira, 1 de novembro de 2011 14:49