SpringMVC基础-7-文件上传处理

图片上传处理

1,配置虚拟目录

由于图片常用的需要静态的访问环境,tomcat开虚拟目录的方式做了几次都失败了,所以我做做了一个apache的服务,将apache的启动路径设置为我存放上传文件的位置。
这里写图片描述
这图显示了需要改的路径,然后启动apache,测试一下localhost的访问是否可以。

2,配置解析器

!-- 文件上传 -->
<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 设置上传文件的最大尺寸为5MB -->
    <property name="maxUploadSize">
        <value>5242880</value>
    </property>
</bean>

3,使用一个上传组件uploadfy(h5)

关于上传组件的内容我做了一个关于uploadfy的小例子。
这个组件是在csdn上下载的,依赖不粘贴了,看一下jsp的代码。

<form>
    <input id="file_upload" name="file_upload" type="file" multiple="true">
    <a style="position: relative; top: 3%;" href="javascript:$('#file_upload').uploadifive('upload')">UploadFiles</a>
    <div  id="queue" ></div>
    <img id="result" alt="" src="">
</form>
    $(function() {
        $('#file_upload').uploadifive({
            'auto' : false,
            'queueID' : 'queue',
            'uploadScript' : 'file/onefile',
            'onUploadComplete' : function(file, data) {
                var jsonData =JSON.parse(data);
                alert(jsonData);
                $('#result').attr("src",jsonData.data);

            }
        });
    });

在html中,input代表了可选的上传组件,在js中设置了上传方法和回调。在看一下controller

@RequestMapping("/onefile")
@ResponseBody
public RemmoResult oneFileUpload(MultipartHttpServletRequest request, HttpServletResponse response) {

    //1. build an iterator
       Iterator<String> itr =  request.getFileNames();
       CommonsMultipartFile file=null;

     //2. get each file
       while(itr.hasNext()){

           //2.1 get next MultipartFile
        file = (CommonsMultipartFile) request.getFile(itr.next()); 
           System.out.println(file.getOriginalFilename() +" uploaded! ");

           String fileName = file.getOriginalFilename();
        System.out.println("原始文件名:" + fileName);


        // 新文件名
        String newFileName = UUID.randomUUID() + fileName;
        // 获得项目的路径
        ServletContext sc = request.getSession().getServletContext();

        // 上传位置
        // String path = sc.getRealPath("/img") + "\\"; // 设定文件保存的目录

        File f = new File(path);
        if (!f.exists())
            f.mkdirs();
        if (!file.isEmpty()) {
            try {
                FileOutputStream fos = new FileOutputStream(path + newFileName);
                InputStream in = file.getInputStream();
                int b = 0;
                while ((b = in.read()) != -1) {
                    fos.write(b);
                }
                fos.close();
                in.close();
                return RemmoResult.ok("http://localhost/"+newFileName);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

       }
    return null;


}

我们使用MultipartHttpServletRequest来接传过来的数据,获得数组后再循环遍历,将这个文件写到我们的设置的apache的路径中,我用了一个共同的返回值,这个返回值是一个

{
"status":"0",
"msg":"",
"data":"返回数据"
}

这种类型的对象,在前端可以接到json字符串,转成json对象后就可以直接使用了。

这里主要就是记录一下上传的功能,一个具体的上传组件,我还需要再封装一下。初学者弄起来还是不容易啊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章