使用SmartUpload组件上传文件

    刚刚上手的项目 被文件上传困扰了好久,之前用fileupload组件上传,代码参考孤傲苍狼博客,可是除了文件名,表单内的其他内容不知道该怎么读出来进行存储;所以此次采用smartupload组件进行上传

    add.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'add.jsp' starting page</title>
  </head>
  
  <body>
    <form action="backpages/memberIntroduce/addDo.jsp" method="post" enctype="multipart/form-data">
    	姓名:<input type="text" name="name"><br>
    	简介:<input type="text" name="content"><br>
    	照片:<input type="file" name="photo"><br>
    	<input type="submit" value="提交">
    </form>
  </body>
</html>

     enctype必须是"multipart/form-data";

     addDo.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.HQWeb.entity.*"%>
<%@ page import="com.HQWeb.dao.*"%>
<%@page import="com.jspsmart.upload.SmartUpload"%>
<%@page import="com.jspsmart.upload.File"%>
<%
	request.setCharacterEncoding("UTF-8");
	response.setCharacterEncoding("UTF-8");
	//创建smartupload组件
	SmartUpload su = new SmartUpload();

	//初始化组件上下文
	su.initialize(pageContext);
        //上传文件
	su.upload();

	out.println("上传" + su.save("picture/memberPhoto") + "个文件成功!!!"+"<br>");

	//得到表单项
	//String name = su.getRequest().getParameter("name");
	//String content = su.getRequest().getParameter("content");
	String name = new String(su.getRequest()
			.getParameter("name").trim().getBytes(), "utf-8");
	String content = new String(su.getRequest()
			.getParameter("content").trim().getBytes(), "utf-8");

	//获取单个文件
	File file = su.getFiles().getFile(0);//可用一个for循环获取多个文件

	//判断当前file是否选择了文件;如果没有则继续
	if (file.isMissing())
		System.out.println("未选择文件");//如果用for循环 则continue

	//设置上传服务器的位置
	String path = "/picture/memberPhoto";

	//得到上传文件的名称
	String photo = file.getFileName();

	//上传文件的路径
	path = path + photo;

	//保存文件
	file.saveAs(path, SmartUpload.SAVE_VIRTUAL);
	System.out.println(photo);
	Member member = new Member();
	member.setName(name);
	member.setContent(content);
	member.setPhoto(photo);

	if (MemberDao.insert(member)) {
		out.println("操作成功,3秒后返回列表");
		response.setHeader("refresh", "3;list.jsp");
	} else {
		out.println("操作失败,3秒钟后返回列表");
		response.setHeader("refresh", "3;list.jsp");
	}
%>

     在addDo.jsp页面里面,因为smartupload将全部内容封装,所以request.getParameter并不能获取到字段,需要使用封装好的su.getRequest().getParameter("name");

     但又一个问题,上传中文表单时存储到数据库中会显示乱码,使用su.getRequest().getParameter("name").trim().getBytes(), "utf-8");能解决一部分,乱码问题尚待解决

    重新自己总结上传文件流程:

1、实例化SmartUpload对象;

<!--[if !supportLists]-->2、 2、<!--[endif]-->初始化组建上下文(initializepageContext)方法);

<!--[if !supportLists]-->3、 3、<!--[endif]-->文件上传(upload()方法);

<!--[if !supportLists]-->4、 4、<!--[endif]-->获取表单项;

<!--[if !supportLists]-->5、 5、<!--[endif]-->获取文件(getFiles()返回Files类型,再使用其getFileindex)方法获取单个文件);

<!--[if !supportLists]-->6、 6、<!--[endif]-->设置服务器位置

<!--[if !supportLists]-->7、 7、<!--[endif]-->获取文件名

<!--[if !supportLists]-->8、 8、<!--[endif]-->设置路径;即path+filename path和文件名中间必须有"/"否则会将文件上传至pth路径下,并将文件名称改为该目录文件夹名+文件名

<!--[if !supportLists]-->9、 9、<!--[endif]-->使用file.saveAs(path, SmartUpload.SAVE_VIRTUAL);方法将文件保存至指定目录下

猜你喜欢

转载自201606052202.iteye.com/blog/2323886