天天看点

Spring中实现文件上传

实现图片上传 

由于post一个包含文件上传的form会以multipart/form-data请求发送给服务器,必须明确告诉dispatcherservlet如何处理multipartrequest。首先在dispatcher-servlet.xml中声明一个multipartresolver:

xml 代码

<bean id="multipartresolver"  

    class="org.springframework.web.multipart.commons.commonsmultipartresolver">  

    <!-- 设置上传文件的最大尺寸为1mb -->  

    <property name="maxuploadsize">  

        <value>1048576</value>  

    </property>  

</bean>  

 这样一旦某个request是一个multipartrequest,它就会首先被multipartresolver处理,然后再转发相应的controller。 

在uploadimagecontroller中,将httpservletrequest转型为multiparthttpservletrequest,就能非常方便地得到文件名和文件内容:

java 代码

public modelandview handlerequest(httpservletrequest request,   

            httpservletresponse response) throws exception {   

        // 转型为multiparthttprequest:   

        multiparthttpservletrequest multipartrequest = (multiparthttpservletrequest) request;   

        // 获得文件:   

        multipartfile file = multipartrequest.getfile(" file ");   

        // 获得文件名:   

        string filename = file.getoriginalfilename();   

        // 获得输入流:   

        inputstream input = file.getinputstream();   

        // 写入文件   

        // 或者:   

        file source = new file(localfilename.tostring());   

        multipartfile.transferto(source);   

    }  

生成缩略图 (目录)

当用户上传了图片后,必须生成缩略图以便用户能快速浏览。我们不需借助第三方软件,jdk标准库就包含了图像处理的api。我们把一张图片按比例缩放到120x120大小,以下是关键代码:

public static void createpreviewimage(string srcfile, string destfile) {   

        try {   

            file fi = new file(srcfile); // src   

            file fo = new file(destfile); // dest   

            bufferedimage bis = imageio.read(fi);   

            int w = bis.getwidth();   

            int h = bis.getheight();   

            double scale = (double) w / h;   

            int nw = image_size; // final int image_size = 120;   

            int nh = (nw * h) / w;   

            if (nh > image_size) {   

                nh = image_size;   

                nw = (nh * w) / h;   

            }   

            double sx = (double) nw / w;   

            double sy = (double) nh / h;   

            transform.settoscale(sx, sy);   

            affinetransformop ato = new affinetransformop(transform, null);   

            bufferedimage bid = new bufferedimage(nw, nh,   

                    bufferedimage.type_3byte_bgr);   

            ato.filter(bis, bid);   

            imageio.write(bid, " jpeg ", fo);   

        } catch (exception e) {   

            e.printstacktrace();   

            throw new runtimeexception(   

                    " failed in create preview image. error:  "  

                            + e.getmessage());   

        }   

    }  

特别说明:尊重作者的劳动成果,转载请注明出处哦~~~http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt110

上一篇: java反射