【发布时间】:2012-09-06 21:13:39
【问题描述】:
我想通过这个 Servlet 使用 HTML 表单 <input type="file" name="file" /> 将图像插入 MySQL,所以我使用这个代码。
if (!isMultipart) {
System.out.println("File Not Uploaded");
} else {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = null;
try {
items = upload.parseRequest(request);
System.out.println("items: "+items);
} catch (FileUploadException e) {
e.printStackTrace();
}
Iterator itr = items.iterator();
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();
if (item.isFormField()){
String name = item.getFieldName();
System.out.println("name: "+name);
String value = item.getString();
System.out.println("value: "+value);
} else {
try {
String itemName = item.getName();
Random generator = new Random();
int r = Math.abs(generator.nextInt());
String reg = "[.*]";
String replacingtext = "";
System.out.println("Text before replacing is:-" + itemName);
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(itemName);
StringBuffer buffer = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(buffer, replacingtext);
}
int IndexOf = itemName.indexOf(".");
String domainName = itemName.substring(IndexOf);
System.out.println("domainName: "+domainName);
String finalimage = buffer.toString()+"_" + r + domainName;
System.out.println("Final Image===" + finalimage);
File savedFile = new File("/home/abdo/NetBeansProjects/Gestion_des_taches/web/"+"img/"+finalimage);
item.write(savedFile);
out.println("<html>");
out.println("<body>");
out.println("<table><tr><td>");
out.println("<img src=images/" + finalimage + ">");
out.println("</td></tr></table>");
Connection conn = null;
String url = "jdbc:mysql://localhost/";
String dbName = "actors";
String driver = "com.mysql.jdbc.Driver";
String username = "root";
String userPassword = "root";
String strQuery = null;
String strQuery1 = null;
String imgLen="";
try {
System.out.println("itemName::::: "+itemName);
Class.forName(driver).newInstance();
conn = DriverManager.getConnection(url+dbName,username,userPassword);
Statement st = conn.createStatement();
strQuery = "insert into pictures set image='" + finalimage + "'";
int rs = st.executeUpdate(strQuery);
System.out.println("Query Executed Successfully++++++++++++++");
out.println("image inserted successfully");
out.println("</body>");
out.println("</html>");
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
当我使用时
out.println("<img src=images/" + finalimage + ">");
它工作正常。我的问题是如何通过 MySQL 请求 select image from pictures; 显示图像?
这是pictures 表的输出:
mysql> select * from pictures;
+----+----------------------+
| id | image |
+----+----------------------+
| 42 | Photo_1339972050.jpg |
| 43 | Photo_168423959.jpg |
| 44 | Photo_859939969.jpg |
| 45 | Photo_1696305644.jpg |
| 46 | Photo_910632756.jpg |
| 47 | Photo_560808853.jpg |
+----+----------------------+
6 rows in set (0.00 sec)
【问题讨论】:
-
您想将图像存储在数据库表中吗?或者您只是将图像的名称或路径存储在数据库表中并将图像本身存储在文件系统中?
-
此代码将图像存储在文件中 savedFile = new File("/home/abdo/NetBeansProjects/Gestion_des_taches/web/"+"img/"+finalimage); ,但是在表格中,我只找到了名称,当我显示它们时,我只得到了名称,有什么想法可以从那个文件夹中显示它们吗?