• 图片文件上传


    一、文件上传条件:

      1、依赖表单,请求方式为post, enctype="multipart/form-data"

      2、表单中有file类型的input

    二、提交文件上传的表单,不需要页面跳转,用jquery.form.js插件。以ajax方式提交表单

     1 function submitUpload(){
     2     var option = {
     3             url:path+"/upload/uploadPic.do",//上传的url
     4             dataType:"text",//回调值的数据类型
     5             success:function(responseText){
     6                 var jsonObject = $.parseJSON(responseText);
     7                 //图片回显
     8                 $("#imgsImgSrc").attr("src",jsonObject.realPath);
     9                 //图片相对路径用于数据库保存
    10                 $("#imgs").val(jsonObject.relativePath);
    11                 //页面保存上次访问路径
    12                 $("#lastRealPath").val(jsonObject.realPath);
    13             },
    14             error:function(){
    15                 alert("系统错误");
    16             }
    17     };
    18     //使用ajax方式提交表单
    19     $("#form111").ajaxSubmit(option);
    20 }

    三、在springMVC配置文件中设置

    <!-- 复杂类型文件上传 -->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="maxInMemorySize" value="1024000"/>
        </bean>

    四、文件服务器设置为只读

    1 <init-param>
    2             <param-name>readonly</param-name>
    3             <param-value>false</param-value>
    4         </init-param>

    五、创建文件上传方法

    @Controller
    @RequestMapping("/upload")
    public class EbUploadController {
        
        @RequestMapping("/uploadPic.do")
        public void uploadPic(HttpServletRequest request,PrintWriter pw,String lastRealPath) throws IOException {
            MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
            //获得input类型的name属性
            Iterator<String> inputNames = req.getFileNames();
            String inputName = inputNames.next();
            //获得文件
            MultipartFile file = req.getFile(inputName);
            //将文件转化成字节数组
            byte[] fileBytes = file.getBytes();
            
            //定义文件名
            String fileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
            Random random = new Random();
            for(int i=0;i<3;i++) {
                fileName = fileName + random.nextInt(10);
            }
            //获得原始文件名
            String oriName = file.getOriginalFilename();
            //获得后缀名
            String suffix = oriName.substring(oriName.lastIndexOf("."));
            String realPath = ECPSUtils.readProp("upload_file_path")+"/upload/"+fileName + suffix;
            String relativePath = "/upload/" + fileName + suffix;
            
            
            //不同主机文件上传,创建jersey客户端
            Client client = Client.create();
            //判断比较上次文件路径是否为空,如果不为空,则需要先删除上次图片
            if(StringUtils.isNotBlank(lastRealPath)) {
                WebResource wr = client.resource(lastRealPath);
                wr.delete();
            }
            
            //指定上传的绝对路径
            WebResource wr = client.resource(realPath);
            //文件上传
            wr.put(fileBytes);
            
            //回传绝对路径与相对路径
            JSONObject jo = new JSONObject();
            jo.accumulate("realPath", realPath);
            jo.accumulate("relativePath", relativePath);
            String responseText = jo.toString();
            pw.print(responseText);
            
            
        }
    }
  • 相关阅读:
    SP3946 MKTHNUM
    P1948 [USACO08JAN]电话线Telephone Lines(二分答案+最短路)
    CF375D Tree and Queries(dsu on tree)
    P2051 [AHOI2009]中国象棋(动态规划)
    P3810 【模板】三维偏序(陌上花开)(cdq分治)
    P4390 [BOI2007]Mokia 摩基亚(cdq分治)
    P2163 [SHOI2007]园丁的烦恼(cdq分治)
    UVA11270 Tiling Dominoes(轮廓线动态规划)
    P2475 [SCOI2008]斜堆(递归模拟)
    P2617 Dynamic Rankings(带修主席树)
  • 原文地址:https://www.cnblogs.com/cat-fish6/p/9384931.html
Copyright © 2020-2023  润新知