第一步:
在jsp页面中,注意负责上传文件的控件要使用html:file标签,在html:form处注意加上enctype=“multipart/form-data” method为post
1、
<html:form method="post" action="/save_user" enctype="multipart/form-data" >
2、
<tr>
<td>头像:</td>
<td><html:file property="image" /></td>
</tr>
第二步:
在对应的表单form中定义private FormFile image属性,当然自动生成set和get方法。
第三步:
在pojo中声明一个属性与上传控件对应。
第四步:
在相应的Action中的方法里加入上传的代码:
例如:
UserForm userForm = (UserForm) form;
UserDAO dao = new UserDAO();
String message = null;
String basePath = this.getServlet().getServletContext()
.getRealPath("/");
//获取项目根路径
try {
dao.getSession().beginTransaction();
User temp = (User) dao.findByUserName(userForm.getUserName());
if (temp == null) {
User user = new User();
userForm.fillToUserBean(user);
if (userForm.getImage().getFileName().length() > 0) {
//判断是否有选择上传文件,如果有则文件长度>0
String path = "/uploadImages/" +
//这里的"/uploadImages/"指的是什么?它是我们自行在WebRoot下面创建的用于存放上传文件的文件夹的名称,即:如果我们将上传的文件存放在uploadfile中,我们要做的是在WebRoot下新建一个名为uploadfile的文件夹,并且这里的代码要改为:"/uploadfile/"
dao.picturePath(userForm.getImage());
//这里我们用到了一个自己在DAO中写的名为picturePath的方法,其目的是为了将上传的文件跟换一个不会和数据库已有数据重复的文件名称,这样的好处是即使上传的多个文件实质上一个,但有需要将其区分开时比较方便。再介绍完Action的写法之后我们再来讲解DAO中方法的写法。
String endstring = userForm.getImage().getFileName()
.substring(
userForm.getImage().getFileName()
.lastIndexOf(".") + 1);
if ("jpg".equals(endstring) || "png".equals(endstring)
|| "gif".equals(endstring)) {
try {
dao.saveFile(userForm.getImage(), basePath, path);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
user.setHeaderImg(path);
} else {
user.setHeaderImg("");
}
}
dao.save(user);
dao.getSession().getTransaction().commit();
return mapping.findForward("index");
第五步
在DAO中我们需要修改saveFile,添加picturePath方法,具体代码如下:
saveFile
public void saveFile(FormFile formfile, String basePath, String path)
throws IOException {
FileOutputStream fos = null;
BufferedInputStream in = null;
BufferedOutputStream out = null;
try {
fos = new FileOutputStream(basePath + path);
in = new BufferedInputStream(formfile.getInputStream());
out = new BufferedOutputStream(fos);
byte[] buf = new byte[8192];
int readsize;
while ((readsize = in.read(buf)) != -1) {
out.write(buf, 0, readsize);
out.flush();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (fos != null)
try {
fos.close();
} catch (Exception err) {
err.printStackTrace();
}
if (in != null)
try {
in.close();
} catch (Exception err) {
err.printStackTrace();
}
if (out != null)
try {
out.close();
} catch (Exception err) {
err.printStackTrace();
}
}
}
picturePath
public String picturePath(FormFile formfile) {
String filename = "";
UUIDGenerator g = new UUIDGenerator();
// UUIDGenerator是我们自行编写的一个自动生成名字的一个类,之后会给出具体代码。
filename = formfile.getFileName();
if (filename.length() > 0) {
filename = filename.substring(filename.lastIndexOf("."));
}
filename = (String) g.generate() + filename;
return filename;
}
第六步:
编写工具类:UUIDGenerator
import java.io.Serializable;
import java.net.InetAddress;
public class UUIDGenerator {
private static final int IP;
public static int IptoInt( byte[] bytes ) {
int result = 0;
for (int i=0; i<4; i++) {
result = ( result << 8 ) - Byte.MIN_VALUE + (int) bytes[i];
}
return result;
}
static {
int ipadd;
try {
ipadd = IptoInt( InetAddress.getLocalHost().getAddress() );
}
catch (Exception e) {
ipadd = 0;
}
IP = ipadd;
}
private static short counter = (short) 0;
private static final int JVM = (int) ( System.currentTimeMillis() >>> 8 );
public UUIDGenerator() {
}
protected int getJVM() {
return JVM;
}
protected short getCount() {
synchronized(UUIDGenerator.class) {
if (counter<0) counter=0;
return counter++;
}
}
protected int getIP() {
return IP;
}
protected short getHiTime() {
return (short) ( System.currentTimeMillis() >>> 32 );
}
protected int getLoTime() {
return (int) System.currentTimeMillis();
}
private final static String sep = "";
protected String format(int intval) {
String formatted = Integer.toHexString(intval);
StringBuffer buf = new StringBuffer("00000000");
buf.replace( 8-formatted.length(), 8, formatted );
return buf.toString();
}
protected String format(short shortval) {
String formatted = Integer.toHexString(shortval);
StringBuffer buf = new StringBuffer("0000");
buf.replace( 4-formatted.length(), 4, formatted );
return buf.toString();
}
public Serializable generate() {
return new StringBuffer(36)
.append( format( getIP() ) ).append(sep)
.append( format( getJVM() ) ).append(sep)
.append( format( getHiTime() ) ).append(sep)
.append( format( getLoTime() ) ).append(sep)
.append( format( getCount() ) )
.toString();
}
}
分享到:
相关推荐
使用表单的方式上传比较大的文件,可能遇到瓶颈问题,把文件切割了上传就可以解决这种问题。
1. 文件上传(File Upload) 2. 文件下载(File Download) 3. 文件读取(File Reading) 4、优点: 封装性:工具类封装了NFS相关的复杂连接、认证和I/O操作细节,使得业务层代码无需关心底层通信协议,只需通过...
vue-base64-file-upload - 利用Vue.js将上传文件作为base64 data-uris
利用apache 的FTPClient技术进行ftp的上传下载,可以安装一个ftpserver在自己的机器上面来做测试。
ASP.NET 实现文件上传功能 本文主要介绍如何使用 ASP.NET 实现文件上传功能,包括两种方法:Form 表单提交和 jQuery + AJAX 无刷新上传。 方法一:Form 表单提交 在 ASP.NET 中,可以使用 Form 表单提交实现文件...
jQuery File Upload是一个非常优秀的上传组件,主要使用了XHR作为上传方式,并且利用了相当多的现代浏览器功能,所以可以实现诸如批量上传、超大文件上传、图片预览、拖拽上传、上传进度显示、跨域上传等功能。
利用jquery的工具ajaxfileupload.js配合input[type=file]实现无刷新上传文件,内含教程以及支持文件,希望可以帮助各位,谢谢!
利用jQuery Multiple File Upload Plugin插件,实现的多文件上传,
利用Socket 实现FTP文件上传和文件下载
Exploiting PHP Upload Module ofBypassing File-type CheckExploiting PHP Upload Mo
用form-data 表单形式发送数据,并且上传文件,完整示例,使用libcurl提供的API上传文件。项目使用Vc++ 6.0 和 VS 2017同时编译通过,上传表单数据和文件测试成功。
利用 xShell 与 Linux 进行文件互传 在日常的工作中,我们经常需要在 Windows 和 Linux 之间传输文件,例如上传配置文件、下载日志文件等。这其中,xShell 是一个非常有用的工具,可以帮助我们在 Windows 和 Linux ...
使用JavaScript实现文件上传到本地服务器并获取到上传后文件所在路径,是由到JavaScript,java以及html页面。这个比较好,不是在jsp上获取路径,jsp太简单了,而且过时了,所以就在html页面实现了下功能,我主要是做...
BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。下面这篇文章主要给大家介绍了关于利用Blob进行文件上传的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
该资源主要为excel的文件导出贺excel的文件获取,利用inputFile实现文件上传,可运行代码!
asp.net using System;... file.SaveAs(Path.Combine(AppDomain.CurrentDomain.BaseDirectory+@"ChatTemp\" , file.FileName)); } } public bool IsReusable { get { return true; } } }
multiple属性不支持IE9以下版本浏览器,只能利用后面符合的加减来实现多文件上传了,要不然只能用控件来实现了。Demo拿去按照自己的项目逻辑来使用。
SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统<input type="file" />标签的文件上传模式。 SWFUpload的主要特点 ...
该项目利用了基于springboot + vue + mysql的开发模式框架实现的课设系统,包括了项目的源码资源、sql文件、相关指引文档等等。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理...
spring-boot-upload-file-lead-to-rce-tricks一. docker 漏洞环境搭建docker pull landgrey/spring-boot-fat-jar-write-file-rce:1.2docker run -d -p ... docker 漏洞环境的功能文件上传功能 (默认上传到 /tmp/ 目录,