`
iRoger
  • 浏览: 29372 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

利用File类进行文件上传

阅读更多
第一步:
在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();
	 }

	}
分享到:
评论

相关推荐

    js input file多个文件上传功能.zip

    在JavaScript(JS)中,实现...总的来说,这个功能利用HTML5的新特性,结合JavaScript的File API和Fetch API,实现了用户友好的多文件上传体验。在开发过程中,需要考虑性能优化、错误处理以及与后端服务器的交互细节。

    FCKeditor文件上传漏洞及利用-File-Upload-Vulnerability-in-FCKEditor1

    【FCKeditor文件上传漏洞及利用 - File-Upload-Vulnerability-in-FCKEditor1】 本文主要探讨了FCKeditor(现称为CKeditor)中的PHP文件上传模块存在的安全漏洞,允许攻击者绕过文件类型检查,将恶意PHP代码上传到...

    文件上传插件bootstrap File

    6. **多文件上传**:Bootstrap File Input支持多选文件,用户可以一次选择多个文件进行上传,提高了上传效率。同时,它还提供了批量取消、删除文件的功能。 7. **预览功能**:对于图片、视频等媒体文件,插件提供...

    input file选择文件之后自动上传(样式自定义美化)

    通过使用`&lt;input type="file"&gt;`、事件监听和`$.ajaxFileUpload`,我们可以构建出既美观又功能强大的文件上传组件,提升用户的使用体验。同时,对于开发者来说,理解这些技术原理并熟练应用,是提升Web开发技能的重要...

    FileManager(在线文件管理)

    - 文件上传与下载:用户可以通过网页界面将本地文件上传到云端,并可随时下载保存在服务器上的文件。 - 文件预览与编辑:支持多种文件格式的在线预览,包括文本、图片、音频、视频等,部分文件还支持直接在线编辑...

    HTML5分割上传文件

    HTML5是现代网页开发的重要标准,它引入了许多新特性,其中一项便是改进了文件上传功能。...结合Blob对象、FileReader API和XMLHttpRequest Level 2,开发者可以构建出强大的文件上传功能,满足现代Web应用的需求。

    Java使用NFS实现上传、下载、读取文件工具类

    1. 文件上传(File Upload) 2. 文件下载(File Download) 3. 文件读取(File Reading) 4、优点: 封装性:工具类封装了NFS相关的复杂连接、认证和I/O操作细节,使得业务层代码无需关心底层通信协议,只需通过...

    FileTransfer_文件上传_多线程_

    本项目“FileTransfer_文件上传_多线程”专注于利用C#编程语言实现高效、可靠的文件上传和下载功能,同时支持多种协议,如FTP、SMTP、MSMQ和ActiveMQ。以下是对这些关键知识点的详细说明: **多线程技术** 多线程是...

    利用ftp协议进行文件的上传下载

    在本文中,我们将深入探讨如何利用Apache的FTPClient库在Java环境中实现FTP文件的上传与下载功能,并简要介绍如何设置FTP服务器进行测试。 1. FTP协议基础: FTP基于TCP/IP协议族,提供了双向通信,允许客户端和...

    多文件上传 dojo组件 dojox.form.FileUploader

    5. **多文件上传**:dojox.form.FileUploader支持用户一次选择多个文件进行上传,提高了用户交互体验。 6. **兼容性处理**:通过IFrame回退机制,FileUploader能够兼容不支持HTML5 File API的浏览器,确保应用在较...

    fileManager 文件管理源码

    另外,为了优化性能和用户体验,文件上传可能采用了多线程和分块上传技术,大文件可以被分割成多个小块并发上传,然后在服务器端再进行合并。 总的来说,"fileManager 文件管理源码" 是一个集成了文件操作、Web交互...

    vuebase64fileupload利用Vuejs将上传文件作为base64datauris

    总结来说,`vue-base64-file-upload`是Vue.js生态中一个实用的组件,它简化了文件上传并转换为Base64数据URI的过程,提高了Web应用的交互性和性能。开发者可以通过学习和使用这个组件,深入了解Vue.js组件开发以及...

    利用jspSmartUpload组件进行文件上传

    通过查阅这个帮助文件,开发者可以更深入地了解如何利用该组件实现高效、安全的文件上传功能。 总的来说,JSP Smart Upload是一个实用且功能丰富的文件上传组件,它简化了Java Web开发中的文件上传操作,让开发者...

    完整的文件上传功能。File Reference实现

    本文将详细讲解如何利用`FileReference`类实现完整的文件上传功能,包括单文件和多文件上传。 `FileReference`是AS3中的一个核心类,它允许用户与本地文件系统进行交互,比如选择、读取、保存和上传文件。在Flex...

    jQuery File Upload文件上传插件 v10.32.0.zip

    jQuery File Upload是一款功能强大的文件上传插件,专为前端开发者设计,用于在Web应用程序中实现高效、用户友好的多文件上传功能。这个插件的版本是v10.32.0,它提供了丰富的特性,使得文件上传变得更加简单且可控...

    Bootstrap样式文件上传jquery插件

    1. **多文件上传支持**:用户可以通过一个按钮选择多个文件进行上传,提高了操作效率。 2. **data属性自定义**:利用HTML5的data属性,开发者可以轻松定制按钮文本、图标等外观细节,实现高度的个性化。 3. **兼容性...

    HTML5-File 控件上传文件 .NET版本

    后端.NET服务接收这些文件时,可能使用`HttpPostedFileBase`类,这是一个ASP.NET MVC中处理文件上传的标准方式。你需要创建一个控制器方法来接收并保存文件: ```csharp [HttpPost] public ActionResult Upload...

    强大的php文件上传类强大的php文件上传类

    除了自定义类,还可以利用现成的PHP库,如`Symfony`的`File`和`UploadedFile`类,或`Laravel`框架中的文件上传处理。这些库已经处理了很多常见问题,提供了一套完善的API。 五、安全最佳实践 1. **限制文件大小**...

    使用fileuploader.js实现文件上传

    通过阅读博文,我们可以了解到如何利用`fileuploader.js`实现实时预览、上传进度显示以及文件上传的整个流程。 首先,我们需要在HTML页面中引入`fileuploader.js`库,通常通过CDN或者本地路径引入。接着,创建一个`...

    uniapp 多文件上传

    本篇将详细介绍如何在uniapp中进行多文件上传,并探讨相关的知识点。 首先,我们需要了解uniapp的`uni.uploadFile()`方法,这是uniapp提供的用于上传文件的核心API。这个方法接受多个参数,包括`url`(服务器接口...

Global site tag (gtag.js) - Google Analytics