zoukankan      html  css  js  c++  java
  • PostgreSQL保存文件到数据库

    1.CREATE TABLE public.t_file (
    id INTEGER PRIMARY KEY NOT NULL DEFAULT nextval('t_file_id_seq'::regclass),
    file_name CHARACTER VARYING(100),
    content BYTEA,
    create_date DATE
    );
    CREATE UNIQUE INDEX t_file_id_uindex ON t_file USING BTREE (id);
    2.public class FileUpload {
    private Integer id;
    private String fileName;
    private byte[] content;
    private Date createDate;

    }
    3.<resultMap id="BaseResultMap" type="com.hsmdata.probe.base.model.FileUpload">
    <id column="id" property="id" jdbcType="INTEGER"/>
    <result column="file_name" property="fileName" jdbcType="VARCHAR"/>
    <result column="content" property="content" jdbcType="BINARY"/>
    <result column="create_date" property="createDate" jdbcType="DATE"/>
    </resultMap>
    4.@RequestMapping("/upload2")
    @ResponseBody
    protected void upload2(HttpServletRequest request,
    HttpServletResponse response) throws IOException {

    MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
    if (resolver.isMultipart(request)) {
    MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;

    //接收文件
    MultipartFile documentFile = multipartRequest.getFile("myfiles");
    List<MultipartFile> multipartFileList = multipartRequest.getFiles("myfiles");

    //传回所有文件输入类型的名称
    Iterator<String> files = multipartRequest.getFileNames();
    String fileName = "";
    String originalFilename = "";
    String realPath = request.getSession().getServletContext().getRealPath("/upload");
    while (files.hasNext()) {
    fileName = (String) files.next();
    System.out.println("FileName============" + fileName);
    //用此方法得到上传文件的真正的文件名,这里的fileName指文件输入类型的名称
    MultipartFile myfile = multipartRequest.getFile(fileName);
    originalFilename = myfile.getOriginalFilename();

    System.out.println("文件原名: " + originalFilename);
    System.out.println("文件名称: " + myfile.getName());
    System.out.println("文件长度: " + myfile.getSize());
    System.out.println("文件类型: " + myfile.getContentType());
    System.out.println("========================================");
    try {
    //这里不必处理IO流关闭的问题,因为FileUtils.copyInputStreamToFile()方法内部会自动把用到的IO流关掉
    //此处也可以使用Spring提供的MultipartFile.transferTo(FileMapper dest)方法实现文件的上传
    // FileUtils.copyInputStreamToFile(myfile.getInputStream(), new File(realPath, originalFilename));
    byte[] data = new byte[]{};
    data = inputStreamToByte(myfile.getInputStream());
    if (data == myfile.getBytes()) {
    System.out.println("相等。。。。");
    }
    FileUpload file = new FileUpload();
    file.setFileName(originalFilename);
    file.setContent(data);
    file.setCreateDate(new Date());
    fileService.insert(file);

    }
    catch (IOException e) {
    System.out.println("文件[" + originalFilename + "]上传失败,堆栈轨迹如下");
    e.printStackTrace();
    }
    }

    //设置响应给前台内容的PrintWriter对象
    PrintWriter out = response.getWriter();
    //返回结果
    JSONObject obj = new JSONObject();
    obj.put("fileName", originalFilename);
    out.print(obj.toJSONString());
    }
    }

    //将文件保存到字节数组中
    private byte[] inputStreamToByte(InputStream is) throws IOException {
    ByteArrayOutputStream bAOutputStream = new ByteArrayOutputStream();
    int ch;
    while ((ch = is.read()) != -1) {
    bAOutputStream.write(ch);
    }
    byte data[] = bAOutputStream.toByteArray();
    bAOutputStream.close();
    return data;
    }
    5.@RequestMapping(value = "get", method = RequestMethod.GET)
    @ResponseBody
    protected String get(Integer id) throws IOException {
    FileUpload f = fileService.select(id);
    byte[] data = f.getContent();
    String fileName = f.getFileName();
    FileOutputStream fos = null;
    InputStream in = null;
    //导出成文件

    File file = new File("d:\" + fileName);
    if (!file.exists()) {
    file.createNewFile(); // 如果文件不存在,则创建
    }
    fos = new FileOutputStream(file);
    int size = 0;
    if (data.length > 0) {
    fos.write(data, 0, data.length);
    } else {
    while ((size = in.read(data)) != -1) {
    fos.write(data, 0, size);
    }
    in.close();
    }
    fos.close();
    return "d:\" + fileName;
    }

  • 相关阅读:
    理解JavaScript中的深拷贝和浅拷贝
    再学UML-Bug管理系统UML2.0建模实例(四)
    再学UML-Bug管理系统UML2.0建模实例(三)
    再学UML-Bug管理系统UML2.0建模实例(二)
    再学UML-Bug管理系统UML2.0建模实例(一)
    再学UML-深入浅出UML类图(五)
    再学UML-深入浅出UML类图(四)
    再学UML-深入浅出UML类图(三)
    再学UML-深入浅出UML类图(二)
    再学UML-深入浅出UML类图(一)
  • 原文地址:https://www.cnblogs.com/esther-qing/p/6124519.html
Copyright © 2011-2022 走看看