用Jquery的uploadify控件做了个批量上传图片的功能,图片可以上传了,但是页面表单的值在后台用request取不到,因为要把图片信息保存到数据库,所以很困惑。希望大家帮帮忙,先谢谢大家哦!
我把页面和后台处理的过程先贴出来,大家帮帮看看。
add.jsp<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
<!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=GBK">
<title>Insert title here</title>
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="jquery.uploadify.js"></script>
<link rel="stylesheet" href="uploadify.css" type="text/css" media="screen" />
<script type="text/javascript">
$(document).ready(function() {
$('#fileInput').fileUpload ({
'uploader'  : 'uploader.swf',
'script'    : '../../../../servlet/Upload',
'cancelImg' : 'cancel.png',
'auto'      : false,
'multi'     : true,
'fileDesc' : 'png文件或jpg文件或gif文件',
'fileExt'   : '*.png;*.jpg;*.gif',
'simUploadLimit' : 3,
'folder'    : '/uploads',
'buttonText' :'浏览',
 'onComplete': function(event, queueID, fileObj, reposnse, data) { alert(reposnse); }
});
});
</script>
</head>
<body>
<form id="form1" action="" method="">
<input type="file" name="fileInput" id="fileInput" />
<br />
   <a href="javascript:$('#fileInput').fileUploadStart();">确定上传</a> | <a href="javascript:$('#fileInput').fileUploadClearQueue();">取消上传</a>
<input name="user" type="text" />
</form>
</body>
</html>
Upload.javaimport java.awt.Image;
import java.io.File;
import java.io.IOException;
import java.util.List;import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;import com.yifeng.ehome.util.Guid;public class Upload extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

//
String user = request.getParameter("user");   //获取输入框的值,总是为空????????
System.out.println(user);

//
String savePath = this.getServletConfig().getServletContext().getRealPath("");
savePath = savePath + "/uploads/";
File f1 = new File(savePath);
System.out.println(savePath);
if (!f1.exists()) {
f1.mkdirs();
}
//
DiskFileItemFactory fac = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(fac);
upload.setHeaderEncoding("utf-8");
List fileList = null;
try {
fileList = upload.parseRequest(request);
} catch (FileUploadException ex) {
return;
} //
String name = "";
String extName = "";
for (int i = 0; i < fileList.size(); i++) {
FileItem item = (FileItem) fileList.get(i);
if (!item.isFormField()) {
name = item.getName();
long size = item.getSize();
String type = item.getContentType();
System.out.println(size + " " + type);
if (name == null || name.trim().equals("")) {
continue;
}
//扩展名格式: 如.png 
if (name.lastIndexOf(".") >= 0) {
extName = name.substring(name.lastIndexOf("."));
}
File file = null;
do {
//生成文件名
name = Guid.newGuid();
file = new File(savePath + name + extName);
} while (file.exists());

File saveFile = new File(savePath + name + extName);
try {
item.write(saveFile);
} catch (Exception e) {
e.printStackTrace();
}
}

addCompressImage(item);
}
response.getWriter().print(name + extName);
}
}
上传图片没问题,可以上传图片,可是我想要保存页面user的数据和图片的信息到数据库,用request取不到user的数据,不知道怎么取到,或者是uploadify控件设置其他什么属性?
第一次用这个控件,不是很熟悉,希望用过的朋友帮帮忙,看有什么解决方法!

解决方案 »

  1.   

    'script'    : '../../../../servlet/Upload', 在 web.xml 中是 /Upload所以,'script' :'/Upload'
      

  2.   

    没问题,因为这个JSP文件放的文件夹比较深,/Upload 是对应的根目录
      

  3.   

    'script'    : '../../../../servlet/Upload',
    这句可能有问题!'script'    换成别的类型试试看!
      

  4.   

    既然是文件流,在 form 标签中应该加上: enctype="multipart/form-data"
      

  5.   

    取不到表单中的值,用了其他方式解决了
    现在出现了新的问题,我怎么设置上床文件的个数,我设置了参数:
    'simUploadLimit' : 3,
    'queueSizeLimit'   :3,想限制上传的个数是3个,但现在无法设置,还是可以不停地添加上传的文件,
    不知道应该设置什么参数了,很郁闷
      

  6.   

    'queueSizeLimit'  :3, 就是限制上传队列的个数'queueSizeLimit' 的意思是:同时上传文件的数目
    只要设置了 'queueSizeLimit'  :3 后,在 uploadify.js 中 找下面的方法:看能不能执行jQuery(this).bind("uploadifyQueueFull", {'action': settings.onQueueFull}, ....) {
      alert("上传队列已满,最大的队列是:" + queueSizeLimit);
    }
      

  7.   

    'buttonText' :'浏览',能显示中文??
      

  8.   

    我用过类似的 swfupload
    post_params: {"PHPSESSID" : '$!sessionid',params : '$!params',path:'$!path'},
    加上post_params这个属性
    后台就request.getParameter("params")获取数据Jquery的uploadify 也应该有 类似的属性或者可以fileUploadStart({params:{}})写 
      

  9.   


    每张成功上传的图片通过onComplete方法得到该图片的信息,保存到某个hidden中,提交到后台,从中取出来做处理后保存,应该不会出现图片和说明匹配不上吧?多人同时操作也应该没关系吧?
      

  10.   


    试过了fileUploadStart({params:{}})这种写法报错
      

  11.   


    我在全部上传后,onAllComplete方法中进行提交的,也就是上传图片这个线程结束后再开始提交数据库的,这个线程才开始
      

  12.   

    建议换个组件,用fileupload吧。
      

  13.   


    你是 单图片 还是 多图片 上传 ?我是多文件上传,在IE下每次上传后都返回刚上传的对象ID,然后累加,放到一个hidden中,最后的效果就是:1,2,3,...(已经实现)  但是: FireFox 每次都无法取到 上一次 保存在 hidden 中的值,不知道 LZ 有没有高见?
      

  14.   

    我没取对象ID,只是每张上传成功的图片的名称等信息放到一个hidden,是个字符串,其值是每次的累加值,用,号隔开(每张图片的信息里面我做了处理不包含,号),最后提交到后台保存数据库时再处理下
    和你的做法有点不同
      

  15.   

    要看官方文档
    设置 'scriptData' 选项!
      

  16.   

     uploadify调用的方法里session被付值后,,到别的action里面也找不到相应的session值,,
      

  17.   

    uploadify3.1 用 formData可以传form信息,servlet用request.getParameter();