Upload de arquivos

8 respostas
Aurelio_da_Silva_Gra

alguém sabem como faço pra dar um upload em um arquivo numa página web e gravar esse arquivo num campo blob no sql server?

8 Respostas

T

Para a questão a) use alguma coisa como o componente FileUpload ( http://jakarta.apache.org/commons/fileupload/ ) . (você pode até fazer um servlet para file upload só lendo a especificação, mas como essa especificação é meio complicada de se entender - http://www.ietf.org/rfc/rfc1867.txt , é melhor usar alguma coisa pronta e testada.)
Se você usa o Struts, já tem até um exemplo de upload pronto na documentação.
Para a questão b) não deve ser muito diferente de outros bancos de dados.
Não sei se o driver JTDS ou o driver JDBC da Microsoft suportam BLOBs corretamente. (Lembro que o driver da Oracle não suporta corretamente BLOBs em JDBC, sendo necessário usar algumas classes oracle.*)

Aurelio_da_Silva_Gra

vc poderia ser mais específico, vc tem algum trecho de código?

aborges

Mais especifico em relacao a que?

:arrow: Como utilizar o FileUpload

:arrow: Em relacao ao Struts ( c vc usa )

:arrow: Com relacao aos BLOBS

Aurelio_da_Silva_Gra

Primeiramente em relação ao upload de um arquivo e depois em relação a armazenar como blob.
Eu não estou usando o Struts

aborges

Qt ao upload do arquivo, acho interessante vc dar uma olhada na API q nosso amigo postou ali em cima: http://jakarta.apache.org/commons/fileupload/… Dei uma olhadinha e achei ela bem legal… Qt ao BLOB, de uma olhada na documentacao do seu driver para ver como ele implementa o danado…

A interface para trabalhar com BLOBs definida na especificacao do java eh esta: http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Blob.html

Aurelio_da_Silva_Gra

Depois de ver um artigo da edição 12 da javamagazine consegui fazer o upload do arquivo.

Gostaria de armazezar esse arquivo numa tabela de um banco do sql server, mas não sei que tipo usar para o campo que armazenará esse arquivo.
Que tipo eu uso? binary? byte?

T

Aham, os tipos de dados do SQL Server são:

binary - dados binários de comprimento fixo, até 8KB no máximo
varbinary - dados binários de comprimento variável, até 8KB no máximo
image - dados binários de comprimento variável. O comprimento pode ser maior que 8KB (máximo = 2 gigabytes) porque não é guardado diretamente no registro da tabela, mas em uma área separada do banco.
e outros…

[i]Columns of image data can be used to store variable-length binary data exceeding 8 KB, such as Microsoft Word documents, Microsoft Excel spreadsheets, and images that include bitmaps, Graphics Interchange Format (GIF), and Joint Photographic Experts Group (JPEG) files.

Data in an image data is stored as a string of bits and is not interpreted by SQL Server. Any interpretation of the data in an image column must be made by the application. For example, an application could store data in an image column using a BMP, TIFF, GIF, or JPEG format. The application that reads the data from the image column must recognize the format of the data and display it correctly. All an image column does is provide a location to store the stream of bits that make up the image data value.

Usually, text, ntext, or image strings are large (a maximum of 2GB) character or binary strings stored outside a data row. The data row contains only a 16-byte text pointer that points to the root node of a tree built of internal pointers that map the pages in which the string fragments are stored.
[/i]

Olhar a documentação do SQL Server também ajuda…

Só para completar, fazendo uma tabelinha:

SQL Server -> JDBC
image -> BLOB
text -> CLOB

Aurelio_da_Silva_Gra

Ok, entao defino um campo do tipo image para armazenar o arquivo.

create table tabela{

id int IDENTITY (1, 1) NOT NULL ,

arq image NULL

}

Como faço para gravar no banco do sql server 8.

Usaria a classe File,

arq = “c:\teste.xml”;
File f = new file(arq);

ou usaria a um imputstream:

InputStream stream = getServletContext().getResourceAsStream(“teste.xml”);

como faço pra montar o código sql de inserção?

Criado 16 de novembro de 2004
Ultima resposta 18 de nov. de 2004
Respostas 8
Participantes 3