PC端图片上传

来源:互联网 发布:苹果6支持4g网络吗 编辑:程序博客网 时间:2024/04/30 16:42

如下为PC端图片上传公共方法,可重复性使用,和平常的servlet一样只需在web.xml中配置即可


public class UploaderImageServlet extends HttpServlet{      @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {        super.doGet(req, resp);    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {        Uploader up = new Uploader(req);        String fileRoot = "D:\\"; // 文件服务器根目录        String imgSavePath = fileRoot + "\\"+"img"; // 图片存放路径        up.setSavePath(imgSavePath);        String[] fileType = { ".gif", ".png", ".jpg", ".jpeg", ".bmp" };        up.setAllowFiles(fileType);        up.setMaxSize(20480); // 单位KB        Map<String, Object> json = new HashMap<>();        try {            up.upload();            json.put("result", true);            // 存放压缩图            // 上传完成后文件在服务器上存放的相对路径            json.put("relativePath", up.getUrl().replace(fileRoot, ""));        } catch (Exception e) {            json.put("result", false);        }        json.put("state", up.getState());        resp.setContentType("text/json; charset=utf-8");        PrintWriter writer = resp.getWriter();        ObjectMapper mapper = new ObjectMapper();        String jsonStr = mapper.writeValueAsString(json);        writer.write(jsonStr);        writer.flush();    }}


/** * UEditor文件上传辅助类 * */public class Uploader {    // 输出文件地址    private String url = "";    // 上传文件名    private String fileName = "";    // 状态    private String state = "";    // 文件类型    private String type = "";    // 原始文件名    private String originalName = "";    // 文件大小    private long size = 0;    private HttpServletRequest request = null;    private String title = "";    // 保存路径    private String savePath = "upload";    // 文件允许格式    private String[] allowFiles = { ".rar", ".doc", ".docx", ".zip", ".pdf",            ".txt", ".swf", ".wmv", ".gif", ".png", ".jpg", ".jpeg", ".bmp" };    // 文件大小限制,单位KB    private int maxSize = 10000;    private HashMap<String, String> errorInfo = new HashMap<String, String>();    public Uploader(HttpServletRequest request) {        this.request = request;        HashMap<String, String> tmp = this.errorInfo;        tmp.put("SUCCESS", "SUCCESS"); // 默认成功        tmp.put("NOFILE", "未包含文件上传域");        tmp.put("TYPE", "不允许的文件格式");        tmp.put("SIZE", "文件大小超出限制");        tmp.put("ENTYPE", "请求类型ENTYPE错误");        tmp.put("REQUEST", "上传请求异常");        tmp.put("IO", "IO异常");        tmp.put("DIR", "目录创建失败");        tmp.put("UNKNOWN", "未知错误");    }    /**     * @throws Exception     * @Description: 上传核心方法     */    public void upload() throws Exception {        boolean isMultipart = ServletFileUpload                .isMultipartContent(this.request);        if (!isMultipart) {            this.state = this.errorInfo.get("NOFILE");            return;        }        DiskFileItemFactory dff = new DiskFileItemFactory();        String savePath = this.getFolder(this.savePath);        dff.setRepository(new File(savePath));        try {            ServletFileUpload sfu = new ServletFileUpload(dff);            sfu.setSizeMax(this.maxSize * 1024);            sfu.setHeaderEncoding("utf-8");            FileItemIterator fii = sfu.getItemIterator(this.request);            while (fii.hasNext()) {                FileItemStream fis = fii.next();                if (!fis.isFormField()) {                    this.originalName = fis.getName()                            .substring(fis.getName().lastIndexOf(                                    System.getProperty("file.separator")) + 1);                    if (!this.checkFileType(this.originalName)) {                        this.state = this.errorInfo.get("TYPE");                        continue;                    }                    this.fileName = this.getName(this.originalName);                    this.type = this.getFileExt(this.fileName);                    this.url = savePath + File.separator + this.fileName;                    BufferedInputStream in = new BufferedInputStream(                            fis.openStream());                    File file = new File(this.url);                    FileOutputStream out = new FileOutputStream(file);                    BufferedOutputStream output = new BufferedOutputStream(out);                    Streams.copy(in, output, true);                    this.state = this.errorInfo.get("SUCCESS");                    this.size = file.length();                    output.close();                    out.close();                    in.close();                    break;                } else {                    String fname = fis.getFieldName();                    // 只处理title,其余表单请自行处理                    if (!fname.equals("pictitle")) {                        continue;                    }                    BufferedInputStream in = new BufferedInputStream(                            fis.openStream());                    BufferedReader reader = new BufferedReader(                            new InputStreamReader(in));                    StringBuffer result = new StringBuffer();                    while (reader.ready()) {                        result.append((char) reader.read());                    }                    this.title = new String(result.toString().getBytes(),                            "utf-8");                    reader.close();                }            }        } catch (SizeLimitExceededException e) {            this.state = this.errorInfo.get("SIZE");        } catch (InvalidContentTypeException e) {            this.state = this.errorInfo.get("ENTYPE");        } catch (FileUploadException e) {            this.state = this.errorInfo.get("REQUEST");        } catch (Exception e) {            e.printStackTrace();            this.state = this.errorInfo.get("UNKNOWN");        }    }    /**     * 文件类型判断     *      * @param fileName     * @return     */    private boolean checkFileType(String fileName) {        Iterator<String> type = Arrays.asList(this.allowFiles).iterator();        while (type.hasNext()) {            String ext = type.next();            if (fileName.toLowerCase().endsWith(ext)) {                return true;            }        }        return false;    }    /**     * 获取文件扩展名     *      * @return string     */    private String getFileExt(String fileName) {        return fileName.substring(fileName.lastIndexOf("."));    }    /**     * 依据原始文件名生成新文件名     *      * @return     */    private String getName(String fileName) {        Random random = new Random();        return this.fileName = "" + random.nextInt(10000)                + System.currentTimeMillis() + this.getFileExt(fileName);    }    /**     * 根据字符串创建本地目录 并按照日期建立子目录返回     *      * @param path     * @return     */    private String getFolder(String path) {        SimpleDateFormat formater = new SimpleDateFormat("yyyyMMdd");        path += File.separator + formater.format(new Date());        File dir = new File(path);        if (!dir.exists()) {            try {                dir.mkdirs();            } catch (Exception e) {                this.state = this.errorInfo.get("DIR");                return "";            }        }        return path;    }    public void setSavePath(String savePath) {        this.savePath = savePath;    }    public void setAllowFiles(String[] allowFiles) {        this.allowFiles = allowFiles;    }    public void setMaxSize(int size) {        this.maxSize = size;    }    public long getSize() {        return this.size;    }    public String getUrl() {        return this.url;    }        public void setUrl(String url)    {        this.url = url;    }    public String getFileName() {        return this.fileName;    }    public String getState() {        return this.state;    }    public String getTitle() {        return this.title;    }    public String getType() {        return this.type;    }    public String getOriginalName() {        return this.originalName;    }    public String getSavePath() {       return savePath;    }}


0 0