移动端 图片上传功能问题

clipboard.png

clipboard.png

clipboard.png

点击图片打开相册获取到后显示在当前,做到传入后台的时候,传过去的却不是图片流,应该怎么做?

clipboard.png
不知道传过去的是什么,应该怎么做改变格式?求解!!

阅读 2.6k
2 个回答

你这个是base64编码的图片,直接当成字符串传就行了。当然个人是不建议用base64传的,图片上传用formdata传比较好,可以用URL.createObjectURL实现预览,感兴趣可以看看我的博客,这里献个丑了链接

之前出现过这个问题,我们java欧巴解决了,我把代码要过来了,可以自行研究一下

    
    java后台controller

    /** 
      * 更改头像
      * @auth  
      * @data  2017年6月12日  下午2:49:41
      * @return
     * @throws Exception 
      */
    @ResponseBody 
    @RequestMapping(value="/uploadImg", method=RequestMethod.POST)
    public JSONObject uploadImg() throws Exception {
        JSONObject res = new JSONObject();
        String path = PropertiesUtil.getInstance().getKey("upload.root")+PropertiesUtil.getInstance().getKey("product.path");
        try {
            //用户头像
            String imgPath = getParameter("userImg");
            //截取data:image/png;base64,头部部分
            String base64Url = imgPath.substring(imgPath.indexOf(",")+1);
            //新文件名        
            String fileName = "IMG_" + System.currentTimeMillis() + (int) (Math.random() * 10000) + "." + 
                    imgPath.substring(imgPath.indexOf("/")+1,imgPath.indexOf(";"));
            File fileTemp = new File(path);
            if(!fileTemp.exists()){
                fileTemp.mkdirs();
            }
            //对字节数组字符串进行Base64解码并生成图片
            if(decodeBase64ToImage(base64Url, path, fileName)) {
                res.put("status", success);
                res.put("data", PropertiesUtil.getInstance().getKey("img.url") + fileName);
            } else {
                res = ResultJsonUtil.json(SERVER_ERROR);
            }
        } catch (Exception e) {
            res = ResultJsonUtil.json(SERVER_ERROR);
            e.printStackTrace();
        }
        return res;
    }
    
    
    
    /** 
      * 对字节数组字符串进行Base64解码并生成图片
      * @auth  
      * @data  2017年6月13日  上午10:39:19
      * @param strImg
      * @param string
     * @return 
      */
    private static boolean decodeBase64ToImage(String base64Url, String path,String imgName) {
        if (base64Url == null) {
            return false;
        }
        BASE64Decoder  decoder = new BASE64Decoder();
        try {
            // Base64解码
              byte[] bytes = decoder.decodeBuffer(base64Url);
              for (int i = 0; i < bytes.length; ++i) {
                if (bytes[i] < 0) {// 调整异常数据
                  bytes[i] += 256;
                }
              }
              //生成jpeg图片
              OutputStream out = new FileOutputStream(new File(path + imgName));
              out.write(bytes);
              out.flush();
              out.close();
              return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题