arrière-plan! jsp+mysql N'oubliez pas d'utiliser le type longblob de mysql pour stocker les champs de la base de données. La taille du blob par défaut n'est pas suffisante
: id (char) pic (longblob)
Veuillez indiquer la source de la réimpression. À ce stade, j'ai coopéré avec mon confident. Terminez
l'opération originale blob Lorsque le champ, vous devez avoir une valeur vide. Vérifiez le BLOB, ce qui est si gênant. Vous n'avez pas besoin d'être si gênant pour utiliser la
page PEPAREPARESTATATATATATATORESTATOMEMEMEML
.
org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">testblob.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.io.*"%>
<html xmlns=" http://www.w3.org/1999/xhtml ">
<tête>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Document sans titre</title>
</tête>
<corps>
<%
String id=request.getParameter("id");
String file=request.getParameter("fichier");
out.print(id);
out.print(fichier);
FileInputStream str=nouveau FileInputStream(fichier);
out.print(str.available());
connexion java.sql.Connection ;
java.lang.String strConn;
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn= java.sql.DriverManager.getConnection("jdbc:mysql://localhost/test","root","");
String sql="insérer dans les valeurs test(id,pic)(?,?)";
PreparedStatement pstmt=conn.prepareStatement(sql);
pstmt.setString(1,id);
pstmt.setBinaryStream(2,str,str.available());
pstmt.execute();
out.println("Succès, vous avez inséré une image avec succès");
pstmt.close();
%>
<a href="readblob.jsp">Afficher l'image</a>
<a href="postblob.html">Retour</a>
</corps>
</html>
********************************************** **********
readblob.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*, javax.sql.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.io.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<tête>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Document sans titre</title>
</tête>
<corps>
<%
connexion java.sql.Connection ;
ResultSet rs=null ;
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn= java.sql.DriverManager.getConnection("jdbc:mysql://localhost/test","root","");
Instruction stmt=conn.createStatement();
rs=stmt.executeQuery("select * from testwhere id='1'");
si(rs.next())
{
Blob b = rs.getBlob("pic");
int taille =(int)b.length();
out.print(taille);
InputStream in=b.getBinaryStream();
octet[] par= nouvel octet[taille];
réponse.setContentType("image/jpeg");
ServletOutputStream sos = réponse.getOutputStream();
int octetsRead = 0 ;
while ((bytesRead = in.read(by)) != -1) {
sos.write(by, 0, bytesRead);
}
joindre();
sos.flush();
}
%>
</corps>
</html>
************************************************** * ******************
Remarque : lors de l'utilisation de sos.write(by, 0, bytesRead);, cette méthode affiche le contenu du flux d'entrée dans une nouvelle page,
le cas échéant
.est un autre contenu à afficher sur cette page, vous pouvez uniquement modifier la méthode ci-dessus en bytesRead = in.read(by));
puis utiliser la méthode out.print(new String(by)); attention ici La méthode by.toString() ne peut pas être utilisée. Cette méthode renvoie l'adresse mémoire du contenu à sortir. Il existe des types de zones de texte blob dans MySQL. La taille est de 66536. En gros, il suffit de mettre quelques petits trucs, haha mais maintenant que les photos numériques sont de plus en plus grandes, vous ne pouvez utiliser que longblob. assez pour jouer un film Haha.