功能文件的上传,下载和管理
技术:1.用xml当做数据库存储信息(dom4j,xpath)
2.Java表单的文件上传和下载
3.文件目录的打散 ( Hash目录是一种优化文件存储性能的方法)
需要的jar包:
commons-fileupload-1.2.2.jar、commons-io-2.1.jar、dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar
先写index.jsp
<%@ page language="java"@H_404_16@ import="java.util.*"@H_404_16@ pageEncoding="utf-8"@H_404_16@%>@H_404_16@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">@H_404_16@
<html@H_404_16@>@H_404_16@
<head@H_404_16@>@H_404_16@
<title@H_404_16@>@H_404_16@相册管理系统</title@H_404_16@>@H_404_16@
</head@H_404_16@>@H_404_16@
<body@H_404_16@>@H_404_16@
<h1@H_404_16@>@H_404_16@我的小相册</h1@H_404_16@>@H_404_16@
<a@H_404_16@ href@H_404_16@="jsps/upload.jsp"@H_404_16@>@H_404_16@上传相册</a@H_404_16@>@H_404_16@
<a@H_404_16@ href@H_404_16@="servlets/ShowServlet"@H_404_16@>@H_404_16@浏览相册</a@H_404_16@>@H_404_16@
</body@H_404_16@>@H_404_16@
</html@H_404_16@>@H_404_16@
upload.jsp是下载页面放在jsps目录下
<%@ page language="java"@H_404_16@ import="java.util.*"@H_404_16@ pageEncoding="UTF-8"@H_404_16@%>@H_404_16@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">@H_404_16@
<html@H_404_16@>@H_404_16@
<head@H_404_16@>@H_404_16@
</head@H_404_16@>@H_404_16@
<body@H_404_16@>@H_404_16@
<h1@H_404_16@>@H_404_16@相处上传</h1@H_404_16@>@H_404_16@
<form@H_404_16@ action@H_404_16@="<%=request.getContextPath()%>/servlets/UploadServlet"@H_404_16@ method@H_404_16@="post"@H_404_16@ enctype@H_404_16@="multipart/form-data"@H_404_16@>@H_404_16@
文件:<input@H_404_16@ type@H_404_16@="file"@H_404_16@ name@H_404_16@="file1"@H_404_16@/>@H_404_16@<br@H_404_16@/>@H_404_16@
说明:<input@H_404_16@ type@H_404_16@="text"@H_404_16@ name@H_404_16@="desc"@H_404_16@ />@H_404_16@<br@H_404_16@/>@H_404_16@
<input@H_404_16@ type@H_404_16@="submit"@H_404_16@ value@H_404_16@="上传"@H_404_16@ />@H_404_16@
</form@H_404_16@>@H_404_16@
</body@H_404_16@>@H_404_16@
</html@H_404_16@>@H_404_16@
photos.xml放在src目录下
<?xml version="1.0" encoding="UTF-8"?>@H_404_16@
<photos@H_404_16@>@H_404_16@
</photos@H_404_16@>@H_404_16@
在写值对象PhotoModel
package@H_404_16@ cn.hncu.demain;
public@H_404_16@ class@H_404_16@ PhotoModel@H_404_16@ {@H_404_16@
private@H_404_16@ String id;
private@H_404_16@ String realName;
private@H_404_16@ String ext;
private@H_404_16@ String dir;
private@H_404_16@ String dateTime;
private@H_404_16@ String ip;
private@H_404_16@ String desc;
public@H_404_16@ String getId@H_404_16@() {
return@H_404_16@ id;
}
public@H_404_16@ void@H_404_16@ setId@H_404_16@(String id) {
this@H_404_16@.id = id;
}
public@H_404_16@ String getRealName@H_404_16@() {
return@H_404_16@ realName;
}
public@H_404_16@ void@H_404_16@ setRealName@H_404_16@(String realName) {
this@H_404_16@.realName = realName;
}
public@H_404_16@ String getExt@H_404_16@() {
return@H_404_16@ ext;
}
public@H_404_16@ void@H_404_16@ setExt@H_404_16@(String ext) {
this@H_404_16@.ext = ext;
}
public@H_404_16@ String getDir@H_404_16@() {
return@H_404_16@ dir;
}
public@H_404_16@ void@H_404_16@ setDir@H_404_16@(String dir) {
this@H_404_16@.dir = dir;
}
public@H_404_16@ String getDateTime@H_404_16@() {
return@H_404_16@ dateTime;
}
public@H_404_16@ void@H_404_16@ setDateTime@H_404_16@(String dateTime) {
this@H_404_16@.dateTime = dateTime;
}
public@H_404_16@ String getIp@H_404_16@() {
return@H_404_16@ ip;
}
public@H_404_16@ void@H_404_16@ setIp@H_404_16@(String ip) {
this@H_404_16@.ip = ip;
}
public@H_404_16@ String getDesc@H_404_16@() {
return@H_404_16@ desc;
}
public@H_404_16@ void@H_404_16@ setDesc@H_404_16@(String desc) {
this@H_404_16@.desc = desc;
}
@Override@H_404_16@
public@H_404_16@ String toString@H_404_16@() {
return@H_404_16@ "PhotoModel [id="@H_404_16@ + id + ",realName="@H_404_16@ + realName + ",ext="@H_404_16@
+ ext + ",dir="@H_404_16@ + dir + ",dateTime="@H_404_16@ + dateTime + ",ip="@H_404_16@
+ ip + ",desc="@H_404_16@ + desc + "]"@H_404_16@;
}
}
写工具类两个:
MyUtil(日期格式化,目录打散代码,随机id代码)
package@H_404_16@ cn.hncu.utils;
import@H_404_16@ java.text.SimpleDateFormat;
import@H_404_16@ java.util.Date;
import@H_404_16@ java.util.UUID;
public@H_404_16@ class@H_404_16@ MyUtils@H_404_16@ {@H_404_16@
private@H_404_16@ MyUtils@H_404_16@() {
}
private@H_404_16@ static@H_404_16@ SimpleDateFormat format=new@H_404_16@ SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss"@H_404_16@);
public@H_404_16@ static@H_404_16@ String getCurrentDateTime@H_404_16@(){
return@H_404_16@ format.format(new@H_404_16@ Date());
}
public@H_404_16@ static@H_404_16@ String getUUid@H_404_16@(){
UUID uuid=UUID.randomUUID();
String id=uuid.toString().replaceAll("-"@H_404_16@,""@H_404_16@);
return@H_404_16@ id;
}
public@H_404_16@ static@H_404_16@ String getDir@H_404_16@(String uuid){
String dir1=Integer.toHexString(uuid.hashCode() & 0xf@H_404_16@);
String dir2=Integer.toHexString((uuid.hashCode() & 0xf0@H_404_16@)>>4@H_404_16@);
return@H_404_16@ dir1+"/"@H_404_16@+dir2;
}
}
Dom4jFactory(dom4j的相关操作,获取document对象,保存操作)
package@H_404_16@ cn.hncu.utils;
import@H_404_16@ java.io.File;
import@H_404_16@ java.io.FileInputStream;
import@H_404_16@ java.io.FileNotFoundException;
import@H_404_16@ java.io.FileOutputStream;
import@H_404_16@ java.io.UnsupportedEncodingException;
import@H_404_16@ org.dom4j.Document;
import@H_404_16@ org.dom4j.DocumentException;
import@H_404_16@ org.dom4j.io.OutputFormat;
import@H_404_16@ org.dom4j.io.SAXReader;
import@H_404_16@ org.dom4j.io.XMLWriter;
public@H_404_16@ class@H_404_16@ Dom4jFactory@H_404_16@ {@H_404_16@
private@H_404_16@ static@H_404_16@ Document dom = null@H_404_16@;
private@H_404_16@ static@H_404_16@ String path;
static@H_404_16@ {
try@H_404_16@ {
SAXReader sax = new@H_404_16@ SAXReader();
// 学习一下服务器下的资源路径加载方式(因为我们的资源已经从MyEclipse中发布到Tomcat服务器中了,所以跟原来纯Java项目不一样了)@H_404_16@
// 利用当前类找到它的类加载器,然后通过该类加载器再去获得资源路径@H_404_16@
path = Dom4jFactory.class.getClassLoader().getResource("photos.xml"@H_404_16@)
.getPath();
dom = sax.read(new@H_404_16@ FileInputStream(path));
} catch@H_404_16@ (Exception e) {
throw@H_404_16@ new@H_404_16@ RuntimeException(e.getMessage(),e);
}
}
public@H_404_16@ static@H_404_16@ Document getDom@H_404_16@(){
return@H_404_16@ dom;
}
public@H_404_16@ static@H_404_16@ boolean@H_404_16@ save@H_404_16@(){
try@H_404_16@ {
OutputFormat format=new@H_404_16@ OutputFormat();
format.setEncoding("utf-8"@H_404_16@);
XMLWriter w = new@H_404_16@ XMLWriter( new@H_404_16@ FileOutputStream(new@H_404_16@ File(path)),format);
w.write(dom);
w.close();
return@H_404_16@ true@H_404_16@;
} catch@H_404_16@ (Exception e) {
return@H_404_16@ false@H_404_16@;
}
}
}
从底层写PhotoDao
package cn.hncu@H_404_16@.dao@H_404_16@;@H_404_16@
import java.util@H_404_16@.ArrayList@H_404_16@;@H_404_16@
import java.util@H_404_16@.Iterator@H_404_16@;@H_404_16@
import java.util@H_404_16@.List@H_404_16@;@H_404_16@
import org.dom@H_404_16@4j.Document@H_404_16@;@H_404_16@
import org.dom@H_404_16@4j.Element@H_404_16@;@H_404_16@
import cn.hncu@H_404_16@.demain@H_404_16@.PhotoModel@H_404_16@;@H_404_16@
import cn.hncu@H_404_16@.utils@H_404_16@.Dom@H_404_16@4jFactory;@H_404_16@
public class PhotoDao {
//添加
public boolean add@H_404_16@(PhotoModel photo){
Document dom=Dom4jFactory.getDom@H_404_16@();@H_404_16@
Element root=dom.getRootElement@H_404_16@();@H_404_16@
Element ePhoto=root.addElement@H_404_16@("photo"@H_404_16@);@H_404_16@
ePhoto.addAttribute@H_404_16@("id"@H_404_16@,photo.getId@H_404_16@());@H_404_16@
ePhoto.addAttribute@H_404_16@("realName"@H_404_16@,photo.getRealName@H_404_16@());@H_404_16@
ePhoto.addAttribute@H_404_16@("dir"@H_404_16@,photo.getDir@H_404_16@());@H_404_16@
ePhoto.addAttribute@H_404_16@("ip"@H_404_16@,photo.getIp@H_404_16@());@H_404_16@
ePhoto.addAttribute@H_404_16@("dateTime"@H_404_16@,photo.getDateTime@H_404_16@());@H_404_16@
ePhoto.addAttribute@H_404_16@("ext"@H_404_16@,photo.getExt@H_404_16@());@H_404_16@
ePhoto.addElement@H_404_16@("desc"@H_404_16@).setText@H_404_16@(photo.getDesc@H_404_16@());@H_404_16@
boolean boo=Dom4jFactory.save@H_404_16@();@H_404_16@
return boo;@H_404_16@
}
//浏览
public List<PhotoModel> getAll(){
Document dom=Dom4jFactory.getDom@H_404_16@();@H_404_16@
List<PhotoModel> list=new ArrayList<PhotoModel>();@H_404_16@
Element root=dom.getRootElement@H_404_16@();@H_404_16@
Iterator<Element> it=root.elementIterator@H_404_16@();@H_404_16@
while(it.hasNext@H_404_16@()){
PhotoModel photo=new PhotoModel();@H_404_16@
Element e=it.next@H_404_16@();@H_404_16@
photo.setId@H_404_16@(e.attributeValue@H_404_16@("id"@H_404_16@));@H_404_16@
photo.setDateTime@H_404_16@(e.attributeValue@H_404_16@("dateTime"@H_404_16@));@H_404_16@
photo.setDir@H_404_16@(e.attributeValue@H_404_16@("dir"@H_404_16@));@H_404_16@
photo.setExt@H_404_16@(e.attributeValue@H_404_16@("ext"@H_404_16@));@H_404_16@
photo.setIp@H_404_16@(e.attributeValue@H_404_16@("ip"@H_404_16@));@H_404_16@
photo.setRealName@H_404_16@(e.attributeValue@H_404_16@("realName"@H_404_16@));@H_404_16@
photo.setDesc@H_404_16@(e.elementText@H_404_16@("desc"@H_404_16@));@H_404_16@
list.add@H_404_16@(photo);@H_404_16@
}
return list;@H_404_16@
}
public PhotoModel getSingleById(String id) {
Document dom=Dom4jFactory.getDom@H_404_16@();@H_404_16@
List<PhotoModel> list=getAll();@H_404_16@
for(PhotoModel photo:list){
if(photo.getId@H_404_16@().equals@H_404_16@(id)){
return photo;@H_404_16@
}
}
return null;@H_404_16@
}
public boolean del(String id) {
Document dom=Dom4jFactory.getDom@H_404_16@();@H_404_16@
Element e=(Element) dom.selectSingleNode@H_404_16@("//photo[@id='"@H_404_16@+id.trim@H_404_16@()+"']"@H_404_16@);@H_404_16@
return e.getParent@H_404_16@().remove@H_404_16@(e);@H_404_16@
}
}
最后写四个servlet
UploadServlet 上传Servlet代码
package cn.hncu@H_404_16@.servlets@H_404_16@;@H_404_16@
import java.io@H_404_16@.File@H_404_16@;@H_404_16@
import java.io@H_404_16@.IOException@H_404_16@;@H_404_16@
import java.io@H_404_16@.InputStream@H_404_16@;@H_404_16@
import java.io@H_404_16@.PrintWriter@H_404_16@;@H_404_16@
import java.util@H_404_16@.List@H_404_16@;@H_404_16@
import javax.servlet@H_404_16@.ServletException@H_404_16@;@H_404_16@
import javax.servlet@H_404_16@.http@H_404_16@.HttpServlet@H_404_16@;@H_404_16@
import javax.servlet@H_404_16@.http@H_404_16@.HttpServletRequest@H_404_16@;@H_404_16@
import javax.servlet@H_404_16@.http@H_404_16@.HttpServletResponse@H_404_16@;@H_404_16@
import org.apache@H_404_16@.commons@H_404_16@.fileupload@H_404_16@.FileItem@H_404_16@;@H_404_16@
import org.apache@H_404_16@.commons@H_404_16@.fileupload@H_404_16@.FileUploadException@H_404_16@;@H_404_16@
import org.apache@H_404_16@.commons@H_404_16@.fileupload@H_404_16@.disk@H_404_16@.DiskFileItemFactory@H_404_16@;@H_404_16@
import org.apache@H_404_16@.commons@H_404_16@.fileupload@H_404_16@.servlet@H_404_16@.ServletFileUpload@H_404_16@;@H_404_16@
import org.apache@H_404_16@.commons@H_404_16@.io@H_404_16@.FileUtils@H_404_16@;@H_404_16@
import cn.hncu@H_404_16@.dao@H_404_16@.PhotoDao@H_404_16@;@H_404_16@
import cn.hncu@H_404_16@.demain@H_404_16@.PhotoModel@H_404_16@;@H_404_16@
import cn.hncu@H_404_16@.utils@H_404_16@.MyUtils@H_404_16@;@H_404_16@
public class UploadServlet extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
response.setContentType@H_404_16@("text/html;charset=utf-8"@H_404_16@);@H_404_16@
PrintWriter out@H_404_16@ = response.getWriter@H_404_16@();@H_404_16@
out@H_404_16@.println@H_404_16@("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"@H_404_16@);@H_404_16@
out@H_404_16@.println@H_404_16@("<HTML>"@H_404_16@);@H_404_16@
out@H_404_16@.println@H_404_16@(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"@H_404_16@);@H_404_16@
out@H_404_16@.println@H_404_16@(" <BODY>"@H_404_16@);@H_404_16@
out@H_404_16@.println@H_404_16@("不支持get方式上传!"@H_404_16@);@H_404_16@
out@H_404_16@.println@H_404_16@(" </BODY>"@H_404_16@);@H_404_16@
out@H_404_16@.println@H_404_16@("</HTML>"@H_404_16@);@H_404_16@
out@H_404_16@.flush@H_404_16@();@H_404_16@
out@H_404_16@.close@H_404_16@();@H_404_16@
}
public void doPost(HttpServletRequest request,IOException {
response.setContentType@H_404_16@("text/html;charset=utf-8"@H_404_16@);@H_404_16@
PrintWriter out@H_404_16@ = response.getWriter@H_404_16@();@H_404_16@
String path=request.getServletContext@H_404_16@().getRealPath@H_404_16@("/photos"@H_404_16@);@H_404_16@
DiskFileItemFactory factory=new DiskFileItemFactory();@H_404_16@
factory.setRepository@H_404_16@(new File("g:/a"@H_404_16@));@H_404_16@
ServletFileUpload upload = new ServletFileUpload(factory);@H_404_16@
upload.setSizeMax@H_404_16@(1024@H_404_16@*1024@H_404_16@*10@H_404_16@);//最大10M@H_404_16@
upload.setHeaderEncoding@H_404_16@("utf-8"@H_404_16@);//用于设置文件名的编码,相当于:request.setCharacterEncoding("utf-8");@H_404_16@
FileItem fi=null;@H_404_16@
try {
List<FileItem> list=upload.parseRequest@H_404_16@(request);@H_404_16@
PhotoModel photo = new PhotoModel();//数据封装---需要7个属性@H_404_16@
boolean boo=false;@H_404_16@
InputStream in@H_404_16@ = null;@H_404_16@
for(FileItem fi2:list){
fi=fi2;@H_404_16@
if(fi.isFormField@H_404_16@()){
String desc=fi.getString@H_404_16@("utf-8"@H_404_16@);@H_404_16@
photo.setDesc@H_404_16@(desc);//desc@H_404_16@
}else{
in@H_404_16@=fi.getInputStream@H_404_16@();@H_404_16@
String realName=fi.getName@H_404_16@();@H_404_16@
if(realName==null || realName.trim@H_404_16@().equals@H_404_16@(""@H_404_16@)){
out@H_404_16@.print@H_404_16@("没有选择文件!"@H_404_16@);@H_404_16@
return;@H_404_16@
}
if(realName.indexOf@H_404_16@("\\"@H_404_16@)!=-1@H_404_16@){
realName=realName.substring@H_404_16@(realName.lastIndexOf@H_404_16@("\\"@H_404_16@)+1@H_404_16@);@H_404_16@
}
photo.setRealName@H_404_16@(realName);//真实文件名@H_404_16@
String ext=realName.substring@H_404_16@(realName.lastIndexOf@H_404_16@("."@H_404_16@));@H_404_16@
photo.setExt@H_404_16@(ext);//3@H_404_16@
photo.setDateTime@H_404_16@(MyUtils.getCurrentDateTime@H_404_16@());//4@H_404_16@
photo.setId@H_404_16@(MyUtils.getUUid@H_404_16@());//5@H_404_16@
photo.setDir@H_404_16@(MyUtils.getDir@H_404_16@(photo.getId@H_404_16@()));//6@H_404_16@
photo.setIp@H_404_16@(request.getRemoteAddr@H_404_16@());//7@H_404_16@
}
}
//把相片信息存储到数据库
PhotoDao dao=new PhotoDao();@H_404_16@
boo=dao.add@H_404_16@(photo);@H_404_16@
//如果上面的相片信息保存成功,那么才开始接收图片文件,把它保存到服务器硬盘
if(boo){
System.out@H_404_16@.println@H_404_16@(dao);@H_404_16@
path=path+"/"@H_404_16@+photo.getDir@H_404_16@();@H_404_16@
File dir=new File(path);@H_404_16@
if(!dir.exists@H_404_16@()){
dir.mkdirs@H_404_16@();@H_404_16@
}
String fileName=path+"/"@H_404_16@+photo.getId@H_404_16@()+photo.getExt@H_404_16@();@H_404_16@
FileUtils.copyInputStreamToFile@H_404_16@(in@H_404_16@,new File(fileName));@H_404_16@
String strPath = request.getContextPath@H_404_16@()+"/servlets/ShowServlet"@H_404_16@;@H_404_16@
out@H_404_16@.print@H_404_16@("上传成功!<a href='"@H_404_16@+strPath+"'>浏览相册</a>"@H_404_16@);@H_404_16@
}else{
out@H_404_16@.print@H_404_16@("上传失败!"@H_404_16@);@H_404_16@
}
} catch (FileUploadException e) {
throw new RuntimeException("上传失败!"@H_404_16@,e);@H_404_16@
}finally{
if(fi!=null){
fi.delete@H_404_16@();@H_404_16@
}
}
out@H_404_16@.flush@H_404_16@();@H_404_16@
out@H_404_16@.close@H_404_16@();@H_404_16@
}
}
ShowServlet 浏览相册的Servlet端
package cn.hncu@H_404_16@.servlets@H_404_16@;@H_404_16@
import java.io@H_404_16@.IOException@H_404_16@;@H_404_16@
import java.io@H_404_16@.PrintWriter@H_404_16@;@H_404_16@
import java.util@H_404_16@.List@H_404_16@;@H_404_16@
import javax.servlet@H_404_16@.ServletException@H_404_16@;@H_404_16@
import javax.servlet@H_404_16@.http@H_404_16@.HttpServlet@H_404_16@;@H_404_16@
import javax.servlet@H_404_16@.http@H_404_16@.HttpServletRequest@H_404_16@;@H_404_16@
import javax.servlet@H_404_16@.http@H_404_16@.HttpServletResponse@H_404_16@;@H_404_16@
import cn.hncu@H_404_16@.dao@H_404_16@.PhotoDao@H_404_16@;@H_404_16@
import cn.hncu@H_404_16@.demain@H_404_16@.PhotoModel@H_404_16@;@H_404_16@
public class ShowServlet extends HttpServlet {
IOException if an error occurred
public void doGet(HttpServletRequest request,IOException {
doPost(request,response);@H_404_16@
}
public void doPost(HttpServletRequest request,IOException {
response.setContentType@H_404_16@("text/html;charset=utf-8"@H_404_16@);@H_404_16@
request.setCharacterEncoding@H_404_16@("utf-8"@H_404_16@);@H_404_16@
PrintWriter out@H_404_16@ = response.getWriter@H_404_16@();@H_404_16@
out@H_404_16@.println@H_404_16@("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"@H_404_16@);@H_404_16@
out@H_404_16@.println@H_404_16@("<HTML>"@H_404_16@);@H_404_16@
out@H_404_16@.println@H_404_16@(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"@H_404_16@);@H_404_16@
out@H_404_16@.println@H_404_16@(" <BODY>"@H_404_16@);@H_404_16@
String table="<table border='1' width='100%'>"@H_404_16@+
"<tr><th>文件名</th><th>上传ip</th><th>上传时间</th><th>图片</th><th>说明</th><th>操作</th></tr>"@H_404_16@
;@H_404_16@
out@H_404_16@.print@H_404_16@(table);@H_404_16@
PhotoDao dao=new PhotoDao();@H_404_16@
List<PhotoModel> list=dao.getAll@H_404_16@();@H_404_16@
for(PhotoModel p:list){
out@H_404_16@.print@H_404_16@("<tr>"@H_404_16@);@H_404_16@
out@H_404_16@.println@H_404_16@("<td>"@H_404_16@+p.getRealName@H_404_16@()+"</td>"@H_404_16@);@H_404_16@
out@H_404_16@.println@H_404_16@("<td>"@H_404_16@+p.getIp@H_404_16@()+"</td>"@H_404_16@);@H_404_16@
out@H_404_16@.println@H_404_16@("<td>"@H_404_16@+p.getDateTime@H_404_16@()+"</td>"@H_404_16@);@H_404_16@
//输出图片
String path=request.getContextPath@H_404_16@()+"/photos/"@H_404_16@+p.getDir@H_404_16@()+"/"@H_404_16@+p.getId@H_404_16@()+p.getExt@H_404_16@();@H_404_16@
out@H_404_16@.println@H_404_16@("<td><a href='"@H_404_16@+path+"'><img src='"@H_404_16@+path+"' width='200' height='200'></img></a></td>"@H_404_16@);@H_404_16@
String op="<a href='"@H_404_16@+request.getContextPath@H_404_16@()+"/servlets/DelServlet?id="@H_404_16@+p.getId@H_404_16@()+"'>删除</a> "@H_404_16@;@H_404_16@
out@H_404_16@.println@H_404_16@("<td>"@H_404_16@+p.getDesc@H_404_16@()+"</td>"@H_404_16@);@H_404_16@
op+="<a href='"@H_404_16@+request.getContextPath@H_404_16@()+"/servlets/DownServlet?id="@H_404_16@+p.getId@H_404_16@()+"'>下载</a>"@H_404_16@;@H_404_16@
out@H_404_16@.println@H_404_16@("<td>"@H_404_16@+op+"</td>"@H_404_16@);@H_404_16@
out@H_404_16@.print@H_404_16@("</tr>"@H_404_16@);@H_404_16@
}
out@H_404_16@.println@H_404_16@("</table>"@H_404_16@);@H_404_16@
out@H_404_16@.println@H_404_16@(" </BODY>"@H_404_16@);@H_404_16@
out@H_404_16@.println@H_404_16@("</HTML>"@H_404_16@);@H_404_16@
out@H_404_16@.flush@H_404_16@();@H_404_16@
out@H_404_16@.close@H_404_16@();@H_404_16@
}
}
DownServlet 下载的服务器代码
package cn.hncu@H_404_16@.servlets@H_404_16@;@H_404_16@
import java.io@H_404_16@.FileInputStream@H_404_16@;@H_404_16@
import java.io@H_404_16@.FileOutputStream@H_404_16@;@H_404_16@
import java.io@H_404_16@.IOException@H_404_16@;@H_404_16@
import java.io@H_404_16@.InputStream@H_404_16@;@H_404_16@
import java.io@H_404_16@.OutputStream@H_404_16@;@H_404_16@
import java.io@H_404_16@.PrintWriter@H_404_16@;@H_404_16@
import java.net@H_404_16@.URLEncoder@H_404_16@;@H_404_16@
import javax.servlet@H_404_16@.ServletException@H_404_16@;@H_404_16@
import javax.servlet@H_404_16@.http@H_404_16@.HttpServlet@H_404_16@;@H_404_16@
import javax.servlet@H_404_16@.http@H_404_16@.HttpServletRequest@H_404_16@;@H_404_16@
import javax.servlet@H_404_16@.http@H_404_16@.HttpServletResponse@H_404_16@;@H_404_16@
import cn.hncu@H_404_16@.dao@H_404_16@.PhotoDao@H_404_16@;@H_404_16@
import cn.hncu@H_404_16@.demain@H_404_16@.PhotoModel@H_404_16@;@H_404_16@
public class DownServlet extends HttpServlet {
public void doGet(HttpServletRequest request,IOException {
doPost(request,IOException {
String id=request.getParameter@H_404_16@("id"@H_404_16@);@H_404_16@
response.setContentType@H_404_16@("application/force-download"@H_404_16@);@H_404_16@
PhotoModel p=new PhotoDao().getSingleById@H_404_16@(id);@H_404_16@
if(p!=null){
String realName=p.getRealName@H_404_16@();@H_404_16@
realName=new String(realName.getBytes@H_404_16@("iso8859-1"@H_404_16@),"utf-8"@H_404_16@);@H_404_16@
response.setHeader@H_404_16@("content-Disposition"@H_404_16@,"attachment;filename=\""@H_404_16@+realName+"\""@H_404_16@);@H_404_16@
String relpath=getServletContext().getRealPath@H_404_16@("/photos/"@H_404_16@+p.getDir@H_404_16@()+"/"@H_404_16@+p.getId@H_404_16@()+p.getExt@H_404_16@());@H_404_16@
InputStream in@H_404_16@=new FileInputStream(relpath);@H_404_16@
OutputStream out@H_404_16@=response.getOutputStream@H_404_16@();@H_404_16@
System.out@H_404_16@.println@H_404_16@(relpath);@H_404_16@
byte buf[]=new byte[1024@H_404_16@];@H_404_16@
int len=0@H_404_16@;@H_404_16@
while ((len=in@H_404_16@.read@H_404_16@(buf))!=-1@H_404_16@){
out@H_404_16@.write@H_404_16@(buf,0@H_404_16@,len);@H_404_16@
}
out@H_404_16@.close@H_404_16@();@H_404_16@
}else{
response.setContentType@H_404_16@("text/html;charset=utf-8"@H_404_16@);@H_404_16@
response.getWriter@H_404_16@().println@H_404_16@("该文件已经被删除!"@H_404_16@);@H_404_16@
}
}
}
Delservlet 删除操作的服务器
package cn.hncu@H_404_16@.servlets@H_404_16@;@H_404_16@
import java.io@H_404_16@.File@H_404_16@;@H_404_16@
import java.io@H_404_16@.FileInputStream@H_404_16@;@H_404_16@
import java.io@H_404_16@.IOException@H_404_16@;@H_404_16@
import java.io@H_404_16@.InputStream@H_404_16@;@H_404_16@
import java.io@H_404_16@.OutputStream@H_404_16@;@H_404_16@
import java.io@H_404_16@.PrintWriter@H_404_16@;@H_404_16@
import javax.servlet@H_404_16@.ServletException@H_404_16@;@H_404_16@
import javax.servlet@H_404_16@.http@H_404_16@.HttpServlet@H_404_16@;@H_404_16@
import javax.servlet@H_404_16@.http@H_404_16@.HttpServletRequest@H_404_16@;@H_404_16@
import javax.servlet@H_404_16@.http@H_404_16@.HttpServletResponse@H_404_16@;@H_404_16@
import cn.hncu@H_404_16@.dao@H_404_16@.PhotoDao@H_404_16@;@H_404_16@
import cn.hncu@H_404_16@.demain@H_404_16@.PhotoModel@H_404_16@;@H_404_16@
public class DelServlet extends HttpServlet {
public void doGet(HttpServletRequest request,IOException {
request.setCharacterEncoding@H_404_16@("utf-8"@H_404_16@);@H_404_16@
response.setContentType@H_404_16@("text/html;charset=utf-8"@H_404_16@);@H_404_16@
PrintWriter out@H_404_16@=response.getWriter@H_404_16@();@H_404_16@
String id=request.getParameter@H_404_16@("id"@H_404_16@);@H_404_16@
PhotoModel p=new PhotoDao().getSingleById@H_404_16@(id);@H_404_16@
if(p!=null){
if(!p.getIp@H_404_16@().equals@H_404_16@(request.getRemoteAddr@H_404_16@())){
out@H_404_16@.println@H_404_16@("你无权进行删除!"@H_404_16@);@H_404_16@
return;@H_404_16@
}
//※※※※以下部分课后补敲的!!!!
//1@H_404_16@删除数据库中的信息
PhotoDao dao=new PhotoDao();@H_404_16@
boolean boo=dao.del@H_404_16@(id);@H_404_16@
//2@H_404_16@把服务器硬盘中的文件删除
if(boo){
String fileName="photos/"@H_404_16@+p.getDir@H_404_16@()+"/"@H_404_16@+p.getId@H_404_16@()+p.getExt@H_404_16@();@H_404_16@
String pathFileName = getServletContext().getRealPath@H_404_16@(fileName);@H_404_16@
File f=new File(pathFileName);@H_404_16@
if(f.exists@H_404_16@()){
f.delete@H_404_16@();@H_404_16@
}
String strPath = request.getContextPath@H_404_16@()+"/servlets/ShowServlet"@H_404_16@;@H_404_16@
out@H_404_16@.println@H_404_16@("相片删除成功!<a href='"@H_404_16@+strPath+"'>浏览相册</a>"@H_404_16@);@H_404_16@
}else{
out@H_404_16@.println@H_404_16@("相片删除失败!"@H_404_16@);@H_404_16@
}
}else{
response.setContentType@H_404_16@("text/html;charset=utf-8"@H_404_16@);@H_404_16@
response.getWriter@H_404_16@().println@H_404_16@("该文件不存在!"@H_404_16@);@H_404_16@
}
}
}