springmvc上传图片的处理

原创 2015年07月10日 13:25:58
/**
*上传请求方法springmvc上传图片(有还是(在没有返回值时默认none))的处理
*@param myfilename
*/
@RequestMapping(value = "/uploadresouce", method = RequestMethod.POST)@ResponseBodypublic String doUploadMyResouce( @RequestParam(value = "myfilename", required = false,
defaultValue = ValueConstants.DEFAULT_NONE) MultipartFile myfilename){
/
 /**文件原名**/
    String imageName = "";
    /**新文件名称由当前项目路径和上传文件路径和文件后缀名组成**/
    String filePath = "";
    /**上传成功与否标示符**/
    String returninfo = "error";
    /**构建图片保存的目录**/
    String logoPathDir = "/WEB-INF/Upload";
    /**得到图片保存目录的真实路径**/
    String logoRealPathDir = request.getSession().getServletContext().getRealPath(logoPathDir);
    if (color_icon == null) {
      /**没有上传图片文件**/
this.myservice.doUpload(""); returninfo =GlobalConfig.SUCCESS; } else { String logImageName = color_icon.getOriginalFilename(); //检查文件后缀是否符合图片类型 boolean checkFileType = FileUtil.checkFileType(logImageName, true); //判断上传文件是否是图片 boolean isImg = this.isimg(color_icon); if (checkFileType && isImg) { //文件原名 imageName = color_icon.getOriginalFilename(); //新文件名称由当前项目路径和上传文件路径和文件后缀名组成 //UUID)加密名称 filePath = String.valueOf(UUID.randomUUID().toString().replaceAll("-", "") + "." + imageName.split("\\.")[1]); //构建图片保存的目录logoRealPathDir String urlimage = logoRealPathDir + "\\" + filePath;
            this.myservice.doUpload(urlimage );
            //根据真实路径创建目录
            File logoSaveFile = new File(logoRealPathDir);
            //是否新建保存文件夹
            if (!logoSaveFile.exists()) {
                logoSaveFile.mkdirs();
            }
            //上传文件
            SaveFileFromInputStream(color_icon.getInputStream(), logoRealPathDir, filePath);
            returninfo =GlobalConfig.SUCCESS;
        }
    }
    return returninfo;
}
------------------------------------------------------------------------------------
/**
 * 上传文件
 *
 * @param is
 * @param path
 * @param filePath
 * @throws IOException
 */
public void SaveFileFromInputStream(InputStream is, String path, String filePath) throws IOException {
    FileOutputStream fs = new FileOutputStream(path + "/" + filePath);
    byte[] buffer = new byte[1 * 1024];
    int byteread = 0;
    while ((byteread = is.read(buffer)) != -1) {
        fs.write(buffer, 0, byteread);
        fs.flush();
    }
    fs.close();
}

/**
 * 判断上传的文件是否为图片
 *
 * @param multipartFile
 * @return
 */
public static boolean isimg(MultipartFile multipartFile) {

    InputStream is = null;
    try {
        is = multipartFile.getInputStream();
        byte[] bt = new byte[2];
        is.read(bt);
        // 获取16进制文件头
        String hex = new BytesUtil().bytesToHexString(bt);
        String fileType = FileUtil.getFileType(multipartFile.getOriginalFilename());
        // 判断图片对应的16进制头
        if (fileType.equals(".jpg")) {
            if (hex.equals("ffd8")) {
                return true;
            }
        }
        if (fileType.equals(".gif")) {
            if (hex.equals("4749")) {
                return true;
            }
        }
        if (fileType.equals(".png")) {
            if (hex.equals("8950")) {
                return true;
            }
        }
        if (fileType.equals(".bmp")) {
            if (hex.equals("424d")) {
                return true;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (is != null) {
                is.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return false;
}
-------------------------------------------
FileUtil,BytesUtil工具类
-----------------------------------------
-----------------FU----------
public class FileUtil {
    /**允许上传的图片类型**/
    public static final String IMG_TYPE = ".jpg|.gif|.png|.bmp";
    /**允许上传的所有文件类型**/
    public static final String ALL_TYPE = ".jpg|.jepg|.gif|.png|.bmp|.gz|.rar|.zip|.pdf|.txt|.swf|.mp3|.jar|.apk|.ipa";

    /**
     * 检测文件大小
     * @param file 文件
     * @param kb 限制大小
     * @return true 超过限制
     */
    public static boolean checkFileSize(File file, int kb){
        long size = file.length();
        if (size > 1024 * kb) {
            return true;
        }
        return false;
    }

    /**
     * 检查文件类型
     * @param fileName 文件名
     * @param isImg 是否检查图片
     * @return true=后缀合法
     * @throws
     */
    public static boolean checkFileType(String fileName, boolean isImg) {
        String fileType = getFileType(fileName);
        if (isImg) {
            return IMG_TYPE.indexOf(fileType.toLowerCase()) != -1;
        } else {
            return ALL_TYPE.indexOf(fileType.toLowerCase()) != -1;
        }
    }

    /**
     * 获取文件类型
     * @param fileName
     * @throws
     */
    public static String getFileType(String fileName) {
        return fileName.substring(fileName.lastIndexOf("."), fileName.length());
    }

    public static void main(String[] args) {
        String s = getFileType("12321.jpg");
        System.out.println(s);
    }
}

----------------BU----------
public class BytesUtil {
    /**
     * Convert byte[] to hex string. 把字节数组转化为字符串
     * 这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。
     * @param src byte[] data
     * @return hex string
     */
    public static String bytesToHexString(byte[] src){
        StringBuilder stringBuilder = new StringBuilder("");
        if (src == null || src.length <= 0) {
            return null;
        }
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv+"");
        }
        return stringBuilder.toString();
    }
    /**
     * Convert hex string to byte[]   把为字符串转化为字节数组
     * @param hexString the hex string
     * @return byte[]
     */
    public static byte[] hexStringToBytes(String hexString) {
        if (hexString == null || hexString.equals("")) {
            return null;
        }
        hexString = hexString.toUpperCase();
        int length = hexString.length() / 2;
        char[] hexChars = hexString.toCharArray();
        byte[] d = new byte[length];
        for (int i = 0; i < length; i++) {
            int pos = i * 2;
            d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
        }
        return d;
    }
    /**
     * Convert char to byte
     * @param c char
     * @return byte
     */
    private static byte charToByte(char c) {
        return (byte) "0123456789ABCDEF".indexOf(c);
    }
}
-------------页面---------
<form  method="POST" enctype="multipart/form-data" 
class="form-horizontal" id="UploadForm" name="UploadForm">
<input type="file" id="myfilename" name="myfilename" >


版权声明:本文为博主书香代码原创文章,未经博主允许不得转载。

相关文章推荐

SpringMVC基础-@CookieValue

1.概述   从Http请求头中的Cookie提取指定的某个Cookie. 2.配置 (1)value(default ""):参数名例如: JSESSIONID (2)require...
  • yhjyumi
  • yhjyumi
  • 2015年08月30日 15:47
  • 4520

Android上传图片到springmvc服务器全

  • 2017年03月03日 16:59
  • 37.12MB
  • 下载

springmvc处理上传图片代码(校验图片尺寸、图片大小)

package com.maizuo.web.controller; import com.maizuo.domain.Result; import com.maizuo.util.Constant...
  • koushr
  • koushr
  • 2016年04月19日 20:47
  • 3707

SpringMVC+Ajax异步上传图片并显示(源码)

SpringMVC+Ajax异步上传图片并显示(源码)

bootstrap fileinput 组件整合SpringMVC上传图片到本地磁盘

整合前的准备步骤1.搭建好基础框架,本文用的是SSM(Spring+SpringMVC+Mybatis),这里的过程就不在本文中讲了,之前我做个一个demo(ssm整合+用户模块),可以参考这个搭建好...

使用WebUploader跨域上传图片,用SpringMVC实现服务器端

使用WebUploader跨域上传图片,用SpringMVC实现服务器端使用WebUploader实现跨域上传图片,当点击上传时,客户端会向服务器端先后发送两次请求,第一次是OPTIONS请求,用来验...

springmvc-带预览的异步上传图片功能

springmvc配合小插件 上传有缩略图 的图片等文件
  • nich002
  • nich002
  • 2015年07月29日 15:51
  • 4624

关于CKEditor4.5.6的使用,自定义toolbar配置,上传图片案例(SpringMVC+MyBatis案例),自定义行高,去编辑器的中内容,将编辑器中内容设置到指定的位置等

关于CKEditor的一个配置整理,改文件为config.js:文件内容如下: /**  * @license Copyright (c) 2003-2016, CKSource - Fre...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:springmvc上传图片的处理
举报原因:
原因补充:

(最多只允许输入30个字)