!!关于jsp图片上传和加载的一些重要问题!!急!!在线等!!跪求!!
怎么样在本地的文件夹中选择图片加载到jsp页面中?然后怎么样把图片存入数据库(sqlserver2000),还需要在查询的时候查询出这个图片?
注:是不是需要先把本地图片存入到服务器的临时文件夹下?
有没有参考的代码,谢谢各位大虾~~~跪求!!!
[解决办法]
JSP页面
<%@page contentType= "text/html;charset=GBK "%>
<%@ taglib uri= "http://jakarta.apache.org/struts/tags-logic "
prefix= "logic "%>
<%@ taglib uri= "http://jakarta.apache.org/struts/tags-html "
prefix= "html "%>
<%@ taglib uri= "http://jakarta.apache.org/struts/tags-bean "
prefix= "bean "%>
<html>
<script type= "text/javascript ">
function v(){
document.myform.img.src=document.myform.pic.value;
}
</script>
<body>
<form action= "photo.do?p=main " method= "POST " enctype= "multipart/form-data " name= "myform "> <%--
得到本地的图片
--%> <input type= "file " name= "pic " onchange= "v() " >
<img name= "img " src= " " > <%--
显示数据库中的图片
--%> <img name= "abc " src= "photo.do?p=view ">
<input type= "submit " value= "going "/>
</form>
</body>
</html>
Action
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.upload.FormFile;
import form.PhotoForm;
/**
* MyEclipse Struts Creation date: 04-13-2007
*
* XDoclet definition:
*
* @struts.action validate= "true "
*/
public class PhotoAction extends DispatchAction {
/*
* Generated Methods
*/
/**
* Method execute
*
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward main(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
PhotoForm tform = (PhotoForm) form;
FormFile file = tform.getPic();
String name = "ruby ";
HttpSession session = request.getSession();
if (file.getFileSize() > 10000) {
}
// 获取文件名
String filename = file.getFileName();
System.out.println(filename);
int index = filename.lastIndexOf( ". ");
System.out.println(index);
filename = filename.substring(index);
System.out.println(filename);
// 设置图片文件临时存放的路径
// String path = session.getServletContext().getRealPath( "/ ") +
//
// "UploadFile\\ " + name + filename;
String path = "D:/ " + name + filename;
try {
// 读取文件中的数据,获取二进制的数据流
InputStream stream = file.getInputStream();
// 把数据写到指定路径
OutputStream bos = new FileOutputStream(path);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.flush();
bos.close();
stream.close();
} catch (Exception fe) {
}
file.destroy();
PreparedStatement pst = null;
String sql = "insert into picture(id,pic) values(?,?) ";
String id = " ";
int a;
// 存储图片到表中
try {
Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver ");
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test ";
Connection m_conn = DriverManager.getConnection(url, "sa ", "1234 ");
//查询ID
Statement s=m_conn.createStatement();
String str1= "select max(id) from picture ";
ResultSet rs=s.executeQuery(str1);
while(rs.next())
{
id=rs.getString(1);
}
if(id==null){
id= "100 ";
a=Integer.parseInt(id);
}else{
a=Integer.parseInt(id)+1;
}
System.out.println(a);
pst = m_conn.prepareStatement(sql);
pst.setInt(1, a);
File filea = new File(path);
FileInputStream in = new FileInputStream(filea);
pst.setBinaryStream(2, in, in.available());
if (filea.exists()) {
filea.delete();
System.out.println( "删除临时文件 ");
}
pst.execute();
m_conn.commit();
} catch (IOException e) {
System.out.println( "文件读取失败. ");
e.printStackTrace();
} catch (Exception e) {
System.out.println( "插入记录失败。。。 ");
e.printStackTrace();
}
return mapping.findForward(null);
}
// 从表中得到照片到页面
public ActionForward view(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
PreparedStatement pst = null;
Connection m_conn=null;
try {
Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver ");
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test ";
m_conn = DriverManager.getConnection(url, "sa ", "1234 ");
String sql = "select pic from picture where id= " + 4;
pst = m_conn.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
if (rs.next()) {
InputStream in = rs.getBinaryStream( "pic ");
int bytesRead = 0;
byte[] buffer = new byte[8192];
//设置照片格式.
response.setContentType( "image/gif ");
//返回ServletOutputStream 对象.
OutputStream outs = response.getOutputStream();
while ((bytesRead = in.read(buffer, 0, 8192)) != -1) {
outs.write(buffer, 0, bytesRead);
}
outs.flush();
in.close();
rs.close();
} else {
rs.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
pst.close();
m_conn.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
return null;
}
}
FormBean
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
/**
* MyEclipse Struts
* Creation date: 04-13-2007
*
* XDoclet definition:
* @struts.form name= "photoForm "
*/
public class PhotoForm extends ActionForm {
/*
* Generated Methods
*/
private FormFile pic;
public FormFile getPic() {
return pic;
}
public void setPic(FormFile pic) {
this.pic = pic;
}
/**
* Method validate
* @param mapping
* @param request
* @return ActionErrors
*/
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
// TODO Auto-generated method stub
return null;
}
/**
* Method reset
* @param mapping
* @param request
*/
public void reset(ActionMapping mapping, HttpServletRequest request) {
// TODO Auto-generated method stub
}
}