关闭

图片的上传和预览(上传到oracle数据库)

标签: java
457人阅读 评论(0) 收藏 举报
分类:

注意:

1.数据库字段使用clob存储

2.实体类中使用byte数组存图片流

3.图片预览以流的形式输出

文件上传下载预览辅助类代码:

package com.yuanxin.app.appkmbgszh.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

public class FileUtil {

    public static List<byte[]> upload(HttpServletRequest request) {
        List<byte[]> ret = new ArrayList<byte[]>();
        try {
            // 将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession()
                    .getServletContext());
            // 检查form中是否有enctype="multipart/form-data"
            if (multipartResolver.isMultipart(request)) {
                // 将request变成多部分request
                MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
                // 获取multiRequest 中所有的文件名
                Iterator iter = multiRequest.getFileNames();
                InputStream is = null;
                while (iter.hasNext()) {
                    // 一次遍历所有文件
                    MultipartFile file = multiRequest.getFile(iter.next().toString());
                    if (file != null) {
                        is = file.getInputStream();
                        byte[] bytes = FileCopyUtils.copyToByteArray(is);
                        ret.add(bytes);

                        /*  SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHssmm");
                          Date date = new Date();
                          String subfix = file.getOriginalFilename().substring(
                                  file.getOriginalFilename().lastIndexOf(".") + 1, file.getOriginalFilename().length());
                          String path1 = path + sdf.format(date) + "." + subfix;
                          result.put("fileName", file.getOriginalFilename());
                          result.put("path", path1);
                          // 上传
                          // 创建目录
                          File fp = new File(path1);
                          if (!fp.exists()) {
                              // 目录不存在的情况下,创建目录。
                              fp.mkdirs();
                          }
                          file.transferTo(fp);*/
                    }

                }

            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        return ret;
    }

    public static void downloadFile(HttpServletResponse response, String path, String fileName) {
        try {
            URL url = new URL(path);
            URLConnection con = url.openConnection();
            con.setConnectTimeout(5000);
            con.setReadTimeout(5000);
            //  File file = new File(path);
            // 以流的形式下载文件。
            InputStream is = con.getInputStream();
            //InputStream is = url.openStream(); 
            byte[] buffer = new byte[is.available()];
            is.read(buffer);
            is.close();
            // 清空response
            response.reset();
            // 设置response的Header
            response.addHeader("Content-Disposition", "attachment;filename="
                    + new String(fileName.getBytes("gb2312"), "ISO8859-1"));
            response.addHeader("Content-Length", "" + buffer.length);
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("multipart/form-data");
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }

    public static void showPhoto(HttpServletResponse response, byte[] photo) {
        response.setContentType("image/*");
        OutputStream toClient = null;
        try {
            toClient = response.getOutputStream();
            toClient.write(photo);
            toClient.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

controller中控制代码:

//上传图片
 @RequestMapping(value = "/headPortraitUpload", method = { RequestMethod.POST, RequestMethod.GET })
    @ResponseBody
    public Map<String, Object> headPortraitUpload(HttpServletRequest request, @Param("userCode") String userCode) {
        LOGGER.info("有访问来自,IP: %s USER-AGENT: %s", request.getRemoteAddr(), request.getHeader("user-agent"));
        LOGGER.info("userCode %s", userCode);
        Map<String, Object> ret = new HashMap<String, Object>();
        if (StringUtils.isBlank(userCode)) {
            ret.put("success", false);
            ret.put("msg", "userCode不能为空");
        }
        try {
            List<byte[]> streams = FileUtil.upload(request);
            if (streams != null && streams.size() > 0) {
                User user = userService.getByCode(userCode).getData();
                UserPhotoAO userPhotoAO = new UserPhotoAO();
                userPhotoAO.setId(user.getId());
                userPhotoAO.setUserCode(user.getCode());
                userPhotoAO.setUserName(user.getName());
                userPhotoAO.setPhoto(streams.get(0));
                userPhotoService.saveOrUpdateUserPhotoAO(userPhotoAO, userCode);
                ret.put("success", true);
                ret.put("msg", "上传成功");
            }
        } catch (Exception e) {
            e.printStackTrace();
            ret.put("success", false);
            ret.put("msg", "上传失败");
        }

        return ret;
    }

    /**
     * 头像显示
     * @param request
     * @param response
     * @param userCode
     */
    @RequestMapping(value = "/showPhoto")
    public void showPhoto(HttpServletRequest request, HttpServletResponse response, @Param("userCode") String userCode) {
        LOGGER.info("有访问来自,IP: %s USER-AGENT: %s", request.getRemoteAddr(), request.getHeader("user-agent"));
        LOGGER.info("userCode %s", userCode);
        UserPhoto userPhoto = userPhotoService.getUserPhotoAO(userCode);
        if (userPhoto != null) {
            FileUtil.showPhoto(response, userPhoto.getPhoto());
        } else {
            UserPhoto userPhoto1 = userPhotoService.getUserPhotoAO("admin");
            FileUtil.showPhoto(response, userPhoto1.getPhoto());
        }

    }

实体字段:

  private byte[] photo;




0
0
查看评论

本地图片存储到oracle数据库中

本地图片存储到oracle数据库中
  • u011850863
  • u011850863
  • 2015-03-12 08:48
  • 491

上传图片到Oracle数据库

  • 2016-02-02 10:49
  • 62KB
  • 下载

WPF中使用Image控件上传图片的两种方式

最近在做WPF的一个小东西,需要做一个上传图片的功能。由于本人刚接触到WPF,做起来显得有点笨拙。通过两天的查阅资料勉强实现了这个功能。通常情况下上传图片后有两种保存方式:一是直接将图片保存至数据库;二是将图片保存在服务器的Image文件夹下,而将图片的路径保存在数据库中。两者各有各的好处,但通常情...
  • bbxylqf126com
  • bbxylqf126com
  • 2014-06-03 17:22
  • 2820

file上传图片 显示点选的上传图片(并没有上传到服务器之前)

$(function() { $('#upload_image').change(function(event) { // HTML5 js 对象的获取 var files = event.target.files, file; if (...
  • Gjanuary
  • Gjanuary
  • 2017-04-23 13:47
  • 726

input[type="files"]上传多图片文件并预览

yy
  • sinat_19803127
  • sinat_19803127
  • 2018-01-12 15:33
  • 63

HTML实现图片上传前预览

HTML5 Upload #destination{ filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(true,sizingMethod=scale); } -->...
  • name_liweibin
  • name_liweibin
  • 2014-04-28 17:56
  • 2377

上传文件前先预览图片的实现方法

1. js版本 function setImagePreview(docObj,localImag,imgObjPreviewId){ var localImagDiv = document.getElementById(localIm...
  • ynwso
  • ynwso
  • 2015-05-26 18:35
  • 627

选择图片后预览(不上传至后台)

这里实现图片预览的最大功臣是FileReader。 FileReader是H5的一个接口 ,和FormData差不多。平常我们是不能直接访问到本地的文件,就算路径是对的也无济于事,但是使用FileReader就可以了。话不多说,直接上代码: 先在HTML 写个样式,大概这样子就行了 HTML代...
  • qq_26769677
  • qq_26769677
  • 2017-08-04 18:59
  • 289

javascript和HTML5上传图片之前实现预览效果

javascript和HTML5上传图片之前实现预览效果 2015-06-28 15:17 by 云溪0707, 1543 阅读, 1 评论, 收藏, 编辑 一:FileList对象与file对象    ...
  • jfkidear
  • jfkidear
  • 2016-01-19 11:46
  • 1771

uploadify多图上传,带缩略图预览删除按钮

其实这个多图上传很久以前就用了,只是自己最近懒没发帖。 话不多说了。 我直接上图。 项目文件。 选择文件。 上传文件。 这样就完成了上传。上传完成后会在文件下面生成3个文件夹。第一个是原图片文件,第二个是550宽度图片,第三个是100X65的图片。 ...
  • xiangyuan1988
  • xiangyuan1988
  • 2015-06-23 17:58
  • 4826
    个人资料
    • 访问:4901次
    • 积分:214
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条
    文章分类