上传图片到到本地图片服务器操作方式

首先搭建一个本地的工程,可以进行web静态资源的访问:

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  4.0.0
  ecps-image
  war
  
 
      com.rl.ecps
      ecps
      0.0.1-SNAPSHOT
      ../pom.xml
 


 

搭建完成之后能够测试访问到静态资源即可,本地图片服务器搭建成功之后,在项目中进行上传图片到图片服务器操作:

使用的是jersey一个整合包,可以完成两台服务器之间的文件通信

            
                com.sun.jersey
                jersey-client
                1.2
            

    /**
     * 图片服务器的主机路径
     */
    public static final String IMAGE_PATH = "http://localhost:8088/ecps-image";

上传代码:

/**
     * 如果是ajax来访问返回值void
     * @throws Exception 
     * 
     * 常犯2个错误
     * 1.忘记修改图片服务器的只读属性,如果没改报403
     * 2.上传图片的realPath不对,报409
     */
    @RequestMapping("/uploadPic.do")
    public void uploadPic(String fileName, HttpServletRequest request, PrintWriter out) throws Exception{
        //强制转换request 转换成复杂类型
        MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;
        //通过指定的文件名获得指定文件名fileName的文件  页面的名字
        MultipartFile mf = mr.getFile(fileName);
        //获得文件的字节数组,用这个字节数组读取文件
        byte[] bytes = mf.getBytes();
        //定义时间戳作为文件名的一部分吗,为了文件名不重复定义时间戳为文件名
        String tFileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
        //定义 Random 随机对象,同样也是为了防止文件名的重复,将"时间戳+随机数"作为文件名
        Random random = new Random();
        //连续加三位 "时间戳和随机数"
        for(int i = 0; i < 3; i++){
            //世时间戳+随机数(是10以内的随机数)
            tFileName = tFileName +  random.nextInt(10);
        }
        //通过转换后的复杂类型的request获得文件的原始文件名,没有加时间戳的文件名
        String oriFileName = mf.getOriginalFilename(); //在电脑硬盘的上的文件名
        //获得原始文件的后缀名
        String suffix = oriFileName.substring(oriFileName.lastIndexOf("."));
        //图片的绝对路径
        String realPath = EbConstants.IMAGE_PATH + "/upload/"+tFileName + suffix;
        //相对路径
        String relativePath = "/upload/"+tFileName + suffix;
        //创建Jersey客户端
        Client client = Client.create();
        //指定web资源
        WebResource wr = client.resource(realPath);
        //上传图片
        wr.put(String.class, bytes);
        //{"realPath":realpath, "relativePath":relative};
        //创建java里面的json对象 
        JSONObject jo = new JSONObject();
        //在json对象中放入键值对
        jo.accumulate("realPath", realPath); //类似于map中的put
        jo.accumulate("relativePath", relativePath);
        String result = jo.toString();
        out.write(result);
    }

需要在工程的的tomcat的web.xml中修改:


        default
        org.apache.catalina.servlets.DefaultServlet
       
            debug
            0
       

       
            listings
            false
       

        1
   

添加:

 
            readonly
            false
  

是设置服务器的只读属性为false,使用jersey就可以上传成功了.把文件的绝对路径通过WebResource上传到图片服务器上去

     //图片的绝对路径
        String realPath = EbConstants.IMAGE_PATH + "/upload/"+tFileName + suffix;

       Client client = Client.create();
        //指定web资源,
        WebResource wr = client.resource(realPath);

防止上传到图片服务器的文件丢失,可以在图片服务器的路径里面随便建立一个文件

你可能感兴趣的:(后台框架)