Stuts 文件上传

三种上传方案
         1、上传到tomcat服务器 上传图片的存放位置与tomcat服务器的耦合度太高
         2、上传到指定文件目录,添加服务器与真实目录的映射关系,从而解耦上传文件与tomcat的关系文件服务器
         3、在数据库表中建立二进制字段,将图片存储到数据库

 

今天我们利用2、上传到指定文件目录,添加服务器与真实目录的映射关系,从而解耦上传文件与tomcat的关系文件服务器来进行文件的上传

首先新建一个图片上传的jsp界面

clzUpload.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/sy/clz_upload.action" method="post" enctype="multipart/form-data">
<input type="hidden" value="${result.cid }" name="cid"><br>
<input type="hidden" value="${result.cname }" name="cname"><br>
<input type="hidden" value="${result.cteacher }" name="cteacher"><br>
<input type="file" name="file">
<input type="submit">
</form>
</body>
</html>

web层ClazzAction

//属性名要和name对应 xxx
private File file;
//xxxFileName
private String fileFileName;
//xxxContentType
private String fileContentType;

跳转上传图片的界面

 package com.crud.web;

 import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List; import org.apache.commons.io.FileUtils; import com.crud.dao.Clazzdao;
import com.crud.entity.Clazz;
import com.crud.util.BaseAction;
import com.crud.util.PageBean;
import com.opensymphony.xwork2.ModelDriven; public class ClazzAction extends BaseAction implements ModelDriven<Clazz>{ private Clazz clz = new Clazz();
private Clazzdao clzdao = new Clazzdao(); //属性名要和name对应 xxx
private File file;
//xxxFileName
private String fileFileName;
//xxxContentType
private String fileContentType; /**
* 跳转上传图片的界面
* @return
*/
public String preUpload() {
try {
this.result = this.clzdao.list(clz, null).get(0);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return "preUpload";
} public String upload() {
String realDri = "E:/Project";
String severDir = "/upload";
try {
//FileUtils.copyFile(file, new File(realDri + "/"+fileFileName));
copyFile(file,new File(realDri+"/"+fileFileName));
clz.setPic(severDir+"/"+fileFileName);
this.clzdao.edit(clz);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return "toList";
}
/**
* 缓冲流
* @param source
* @param target
* @throws IOException
*/
public void copyFile(File source,File target) throws IOException {
BufferedInputStream in=new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream(target));
byte[] bbuf=new byte[1024];
int len=0;
while((len=in.read(bbuf))!=-1) {
out.write(bbuf,0,len);
}
in.close();
out.close();
} public String list() { PageBean pageBean = new PageBean();
pageBean.setRequest(request);
try {
List<Clazz> list = this.clzdao.list(clz, pageBean); request.setAttribute("clzList", list);
request.setAttribute("pageBean", pageBean);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "list";
} /**
* 跳转编辑页面
* @return
*/
public String preSave() {
if(clz.getCid() != 0) {
try {
this.result = this.clzdao.list(clz, null).get(0);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} return "preSave";
} public String add() {
System.out.println("add");
try {
this.code = this.clzdao.add(clz);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return "toList";
} public String edit() {
try {
this.clzdao.edit(clz);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "toList";
} public String del() {
try {
this.clzdao.del(clz);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "toList";
} public File getFile() {
return file;
} public void setFile(File file) {
this.file = file;
} public String getFileFileName() {
return fileFileName;
} public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
} public String getFileContentType() {
return fileContentType;
} public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
} @Override
public Clazz getModel() {
// TODO Auto-generated method stub
return clz;
}
}

以及利用缓存流技术来进行拷贝 也可以直接一行代码来进行

 public String upload() {
String realDri = "E:/Project";
String severDir = "/upload";
try {
FileUtils.copyFile(file, new File(realDri + "/"+fileFileName));
clz.setPic(severDir+"/"+fileFileName);
this.clzdao.edit(clz);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

配置server的server.xml

修改显示数据的jsp界面

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="/zking" prefix="z" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>小说目录</h2>
<br>
<form action="${pageContext.request.contextPath}/sy/clz_list.action"
method="post">
书名:<input type="text" name="bname"> <input type="submit"
value="确定">
<input type="hidden" name="bname">
</form>
<a href="${pageContext.request.contextPath}/sy/clz_preSave.action">增加</a>
<table border="1" width="100%">
<tr>
<td>编号</td>
<td>名称</td>
<td>教员</td>
<td>图片</td>
<del>操作</del>
</tr>
<c:forEach items="${clzList }" var="b">
<tr>
<td>${b.cid }</td>
<td>${b.cname }</td>
<td>${b.cteacher }</td>
<td>
<img style="height: 50px; width: 55px" src="${pageContext.request.contextPath}${b.pic }">
</td>
<td>
<a href="${pageContext.request.contextPath}/sy/clz_preSave.action?cid=${b.cid}">修改</a>&nbsp;&nbsp;&nbsp;
<a href="${pageContext.request.contextPath}/sy/clz_del.action?cid=${b.cid}">删除</a>&nbsp;&nbsp;&nbsp;
<a href="${pageContext.request.contextPath}/sy/clz_preUpload.action?cid=${b.cid}">文件上传</a>&nbsp;&nbsp;&nbsp; </td>
</tr>
</c:forEach>
</table> <z:page pageBean="${pageBean }"></z:page> </body>
</html>

效果

Stuts 文件上传的更多相关文章

  1. struts2的单个文件上传

    本文主要两种方式,一:通过 FileUtils.copyFile(file, savefile);方法复制:二:通过字节流方式复制 web.xml <?xml version="1.0 ...

  2. struts2的多个文件上传

                成功效果图:                 上篇文章描述了单个文件的上传和配置,下面主要讲解下不同的地方: index.jsp <head> <script ...

  3. jquery.uploadify文件上传组件

    1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...

  4. 11、Struts2 的文件上传和下载

    文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...

  5. Java FtpClient 实现文件上传服务

    一.Ubuntu 安装 Vsftpd 服务 1.安装 sudo apt-get install vsftpd 2.添加用户(uftp) sudo useradd -d /home/uftp -s /b ...

  6. 小兔Java教程 - 三分钟学会Java文件上传

    今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...

  7. ,net core mvc 文件上传

    工作用到文件上传的功能,在这个分享下 ~~ Controller: public class PictureController : Controller { private IHostingEnvi ...

  8. Web开发安全之文件上传安全

    很长一段时间像我这种菜鸡搞一个网站第一时间反应就是找上传,找上传.借此机会把文件上传的安全问题总结一下. 首先看一下DVWA给出的Impossible级别的完整代码: <?php if( iss ...

  9. AutoIt实现Webdriver自动化测试文件上传

    在运用WebDriver进行自动化测试时,由于WebDriver自身的限制,对于上传文件时Windows弹出的文件选择窗口无法控制,通过在网上查找资料锁定使用AutoIt来控制文件上传窗口. Auto ...

随机推荐

  1. Qt 简易图片播放器

    一.前言 使用 Qt 制作了一个简单的图片播放器,点击 "浏览按钮" 浏览图片所在目录,目录中的所有图片缩小图标和名称会显示在左侧的图片列表中,点击列表中的图片项,可以在右侧区域的 ...

  2. Github的初始设置

    设置姓名和邮箱地址 git config --global user.name "Firstname Lastname" git config --global user.emai ...

  3. bizcharts 图表内容居中

    当图表内的数据只有一组时,会紧靠在y轴上,如下图: 想要图表的内容居中,解决方法分两种情况. 第一种:如果x轴是日期,则代码设置如下,图表的内容就居中了 const cols = { x: { ali ...

  4. Unity3d—GUI按钮控件

    这是自己的第一篇记录自己的技术文章,自己还是个菜鸟,有错误之处还望大家能够多多指点. 1.在project视图中创建C#脚本,我命名为 Gui_test 2.然后打开该脚本,输入以下代码: using ...

  5. 在ASP.NET Core中添加的Cookie如果含有特殊字符,会被自动转义

    我们知道在Cookie中有些字符是特殊字符,这些字符是不能出现在Cookie的键值中的. 比如"="是Cookie中用来分隔键和值的特殊字符,例如:Key01=Value01,表示 ...

  6. css3贝塞尔曲线过渡动画速率——transition-timing-function:cubic-bezier(n,n,n,n)

    css3过渡动画速率用到的是三阶贝塞尔曲线,曲线有四个点,p0,p1,p2,p3 有几个属性: linear 规定以相同速度开始至结束的过渡效果(等于 cubic-bezier(0,0,1,1)). ...

  7. 写一个TimeUI显示的函数,上代码

    public void FreshDateTime() { string strWeek = string.Empty; #region 格式化星期 switch (DateTime.Now.DayO ...

  8. Java解析复杂JSON数据的一种方法

    1.需解析JSON数据: { "code": 0, "message": "success", "sid": " ...

  9. 为什么你要使用这么强大的分布式消息中间件——kafka

    为什么是kafka? 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户的搜索关键词进行统 ...

  10. 如何设计提高服务API的安全性(二)API密钥方式详解

    在上文已经讲述了基础介绍,这篇文章详细讲解API密钥方式. 利用何种加密方式呢? 经过上面加密算法的理解,单向加密不仅性能高,而且有压缩性,即长度一致,有效减少网络传输过程中的字节大小.适合我们这种调 ...