这几天一直被这个问题困扰着,就是无法用swfupload上传多张图片,今天突然在巧合之间尝试成功了:现在总结如下:
工程目录如图所示,其中css、files、js、swfupload都是它所依赖的文件。用example.jsp来触发action。其中
flash要用swfupload_fp9.swf(之前一直用swfupload.swf,这是比较旧的版本所以触发action后只能发送一张,换成新的版本后可触发多次)
example.jsp代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>SWFUpload简单使用例子 Java版(JSP)</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <script type="text/javascript" src="swfupload/swfupload.js"></script> <script type="text/javascript" src="js/swfupload.queue.js"></script> <script type="text/javascript" src="js/fileprogress.js"></script> <script type="text/javascript" src="js/handlers.js"></script> <link href="css/default.css" rel="stylesheet" type="text/css" /> <script type="text/javascript"> var upload; window.onload = function() { upload = new SWFUpload({ // 处理文件上传的url upload_url: "http://localhost:8080/resirectJSP/zoom.action?upload=1", // 路径写全,否则Firefox下会出现404错误。自由修改处一:处理文件上传的url路径,注意还要写全部 // 上传文件限制设置 file_size_limit : "10240", // 10MB file_types : "*.jpg;*.gif;*.png", //此处也可以修改成你想限制的类型,比如:*.doc;*.wpd;*.pdf file_types_description : "Image Files", file_upload_limit : "0", file_queue_limit : "50", // 事件处理设置(所有的自定义处理方法都在handler.js文件里) file_dialog_start_handler : fileDialogStart, file_queued_handler : fileQueued, file_queue_error_handler : fileQueueError, file_dialog_complete_handler : fileDialogComplete, upload_start_handler : uploadStart, upload_progress_handler : uploadProgress, upload_error_handler : uploadError, upload_success_handler : uploadSuccess, upload_complete_handler : uploadComplete, // 按钮设置 button_image_url : "swfupload/xpbutton.png", // 按钮图标 button_placeholder_id : "spanButtonPlaceholder", button_width: 61, button_height: 22, // swf设置 flash_url : "swfupload/swfupload_fp9.swf", custom_settings : { progressTarget : "fsUploadProgress", cancelButtonId : "btnCancel" }, // Debug 设置 debug: false }); }; </script> </head> <body> <div class="flash" id="fsUploadProgress"> </div> <div style="padding-left: 5px;"> <span id="spanButtonPlaceholder"></span> <input id="btnCancel" type="button" value="取消" onClick="cancelQueue(upload);" disabled="disabled" style="margin-left: 2px; height: 22px; font-size: 8pt;" /> </div> </body> </html>
package swf; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.ServletResponseAware; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadPicture extends ActionSupport implements ServletResponseAware{ /** * */ private static final long serialVersionUID = 7566364916209313775L; private File Filedata; private String imgFileContentType; int i =0; HttpServletResponse response; public String getImgFileContentType() { return imgFileContentType; } public void setImgFileContentType(String imgFileContentType) { this.imgFileContentType = imgFileContentType; } public File getFiledata() { return Filedata; } public void setFiledata(File filedata) { Filedata = filedata; } /************************************************************************/ public void uploadPicture() { HttpServletRequest request = ServletActionContext.getRequest(); System.out.println(request.getParameter("upload")); System.out.println(Filedata); System.out.println(Filedata.getName()); System.out.println("load"); String path = "E:\\Tomcat 6.0\\webapps\\resirectJSP\\files"; SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddkkmmss");//以当前精确到秒的日期为上传的文件的文件名 String imgFileName = sdf.format(new Date())+ i++ +".jpg"; PictureZoom pz = new PictureZoom(Filedata,path,imgFileName); if(pz.CreateThumbnail(700).equals("error")) { System.out.println("照片上传失败"); }else{ System.out.println("上传成功"); try { response.getWriter().write("uploadsuccess:"+imgFileName); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void setServletResponse(HttpServletResponse response) { // TODO Auto-generated method stub this.response = response; } }
PictureZoom.java代码如下:
package swf; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.awt.image.BufferedImage; import java.awt.Image; import java.awt.image.AffineTransformOp; import javax.imageio.ImageIO; import javax.imageio.stream.ImageInputStream; import java.awt.geom.AffineTransform; public class PictureZoom { private String todir; // todir 处理后的图片存放目录 private String sysimgfile; // sysimgfile 处理后的图片文件名前缀 private File F; public PictureZoom(){} public PictureZoom(File file,String todirNow,String sysimgfileNow) { this.todir = todirNow; this.sysimgfile = sysimgfileNow; this.F = file; } public String createThumbnail(int width,int height,byte[] b,File file) { double widthRatio = 1.0; double heightRatio = 1.0; InputStream is = new ByteArrayInputStream(b); BufferedImage Bi = null; try { Bi = ImageIO.read(is); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("byte[]转成InputStream出错"); return "error"; } Image Itemp = Bi.getScaledInstance(width, height, Bi.SCALE_FAST); if(Bi.getHeight()>height) heightRatio = Float.valueOf(height) / Bi.getHeight(); if(Bi.getWidth()>width) widthRatio = Float.valueOf(width) / Bi.getWidth(); System.out.println(Bi.getHeight()); System.out.println(Bi.getWidth()); AffineTransformOp op = new AffineTransformOp(AffineTransform .getScaleInstance(heightRatio, widthRatio), null); Itemp = op.filter(Bi, null); try { ImageIO.write((BufferedImage) Itemp, "jpg", file); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return "error"; } return "success"; } public String CreateThumbnail(int width,int height){ // fileExtNmae是图片的格式 gif jpg 或png // String fileExtNmae=""; double widthRatio = 1.0; double heightRatio = 1.0; if (!F.isFile()) { return "error"; } File ThF = new File(todir, sysimgfile); BufferedImage Bi; try { Bi = ImageIO.read(F); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); return "error"; } Image Itemp = Bi.getScaledInstance(width, height, Bi.SCALE_FAST); if(Bi.getHeight()>height) heightRatio = Float.valueOf(height) / Bi.getHeight(); if(Bi.getWidth()>width) widthRatio = Float.valueOf(width) / Bi.getWidth(); System.out.println(Bi.getHeight()); System.out.println(Bi.getWidth()); AffineTransformOp op = new AffineTransformOp(AffineTransform .getScaleInstance(heightRatio, widthRatio), null); Itemp = op.filter(Bi, null); try { ImageIO.write((BufferedImage) Itemp, "jpg", ThF); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return "error"; } return "success"; } public String CreateThumbnail(int width){ // fileExtNmae是图片的格式 gif jpg 或png // String fileExtNmae=""; double widthRatio = 1.0; if (!F.isFile()) { return "error"; } File ThF = new File(todir, sysimgfile); BufferedImage Bi; try { Bi = ImageIO.read(F); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); return "error"; } Image Itemp = Bi.getScaledInstance(width, width, Bi.SCALE_FAST); if(Bi.getWidth()>width) widthRatio = Float.valueOf(width) / Bi.getWidth(); System.out.println(Bi.getHeight()); System.out.println(Bi.getWidth()); AffineTransformOp op = new AffineTransformOp(AffineTransform .getScaleInstance(widthRatio, widthRatio), null); Itemp = op.filter(Bi, null); try { ImageIO.write((BufferedImage) Itemp, "jpg", ThF); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return "error"; } return "success"; } }