龙行天下

  政 博
随笔 - 23, 文章 - 0, 评论 - 12, 引用 - 0
数据加载中……

在Struts框架内实现图片上传 (转载:http://www.blogjava.net/Todayfreeman/)

这个问题让我郁闷了两三天时间,最后才发现问题是在JSP端  <html:form action="/uploadsAction"  enctype="multipart/form-data"  >
标签如果少了"  enctype="multipart/form-data"  服务器就会报错,
下面把代码贴出来.

JSP端
 <html:errors />
          <html:form action="/uploadsAction"  enctype="multipart/form-data"  >
            <html:file property="theFile" /> 
             <html:radio property="upType" value="a" />CSVFileReader
             <html:radio property="upType" value="b" />FileUp      
            <html:submit value="OK"  />
          </html:form>
FormBean中将属性定义为FormFile,geter seter 方法依旧.
Action 中的代码如下:实现将图片上传至UPLOAD文件夹内 如果文件大于20K或是宽&高超过规定范围的,会重新勾画.实现对上传图片的控制.
当然这只是测试Action没有跳转页面..

package upload;

import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.Action;
import org.apache.struts.upload.*;
import java.io.IOException;
import java.awt.Image;
import java.awt.image.BufferedImage;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;

import java.io.File;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;

public class UploadAction extends Action {
    public ActionForward execute(ActionMapping actionMapping,
                                 ActionForm actionForm,
                                 HttpServletRequest servletRequest,
                                 HttpServletResponse servletResponse)throws Exception {
        System.out.println("asdasdasdasdasdasd");
        UploadForm uploadForm = (UploadForm) actionForm;
        FormFile pic =  uploadForm.getPic();
        String picname = pic.getFileName();
        String uploadFileName = servletRequest.getSession()
                                .getServletContext()
                                .getRealPath("upload")+"\\"+picname;
        File upliadFile = new File(uploadFileName);
        BufferedInputStream bis = null;
        Image image = null;
        BufferedOutputStream bos = null;
        try{
        if(pic.getFileSize()<2*1024*1024){
        bis = new BufferedInputStream(pic.getInputStream());
        image = javax.imageio.ImageIO.read(bis);
        int width = image.getWidth(null);
        int height = image.getHeight(null);
        int w = 160;
        int h = 120;
        if(width>w||height>h){
        BufferedImage bi = new BufferedImage(w,h,
                                             BufferedImage.TYPE_INT_RGB);
        bi.getGraphics().drawImage(image,0,0,w,h,null);
        bos = new BufferedOutputStream(new FileOutputStream(
       upliadFile));
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
     encoder.encode(bi);
        System.out.println(width * height);
        }else{
        bos = new BufferedOutputStream(new FileOutputStream(upliadFile));
        byte[] date = new byte[5*1024];
        int len = bis.read(date);
        while (len!=-1){
            bos.write(date);
            len = bis.read(date);
        }
        }
        }
             return actionMapping.findForward("ok");
        }catch(Exception e){
        e.printStackTrace();
    } finally {
        try {
            if (bis != null)
                bis.close();
        } catch (IOException e1) {

            e1.printStackTrace();
        }
        try {
            if (bos != null)
                bos.close();
        } catch (IOException e2) {

            e2.printStackTrace();
        }
    }

        return actionMapping.findForward("ok");
    }
}

posted on 2006-05-03 20:09 feingto 阅读(958) 评论(0)  编辑  收藏 所属分类: Java Web


只有注册用户登录后才能发表评论。


网站导航: