好运物流网-全国领先的物流网   好运物流网-登录  好运物流网-免费注册 进入我的后台 首页 | 发布信息 | 服务项目 | 物流百科
物流查询|物流公司|中国物流信息网-好运物流网
 
你正在查看的信息:资讯首页->资讯频道->IT编程技术->正文

java如何实现上传文件-大文件以二进制保存到数据库?把文件保存到数据中的实现方法

更新时间:2022/4/23 14:13    出处:互联网
已经浏览
1381
转自:https://blog.csdn.net/qq_29631069/article/details/70054201 1 
一、创建表
 2 oracle:
 3 
 4 create table baoxiandan (
 5   id number(20) not null,
 6   fileName varchar2(200) not null,
 7   content blob,
 8   primary key(id)
 9   );
10 create sequence seq_baoxiandan;

二、Hibernate映射文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.erry.tntops.acer.model.impl.CarrierImpl"
           table="BAOXIANDAN"
           proxy="com.erry.tntops.acer.model.Carrier">
        <id name="id" column="ID" type="long" unsaved-value="-1">
            <generator class="sequence">
                <param name="sequence">SEQ_BAOXIANDAN</param>
            </generator>
        </id>
        <property name="fileName" column="filename" type="java.lang.String" not-null="false">
            <meta attribute="caption">${tntops.acer.Carrier.code}</meta>
        </property>
        <property name="content" column="content" type="byte[]">
            <meta attribute="caption">${tntops.acer.Carrier.name}</meta>
        </property>
    </class>
</hibernate-mapping>

三、pojo类
import com.erry.tntops.common.model.impl.BaseModelImpl;
import com.erry.tntops.acer.model.Carrier;

import java.util.Date;

/**
* Created by IntelliJ IDEA.
* User: chenyang
* Date: 2008-7-28
* Time: 17:46:32
* To change this template use File | Settings | File Templates.
*/
public class CarrierImpl extends BaseModelImpl implements Carrier {

    private long id;
    private String fileName;
    private byte content[];

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public byte[] getContent() {
        return content;
    }

    public void setContent(byte[] content) {
        this.content = content;
    }
}

四、Java代码
1、入库
            //获得文件名,fileNamePath为文件路径变量
            String fileName = fileNamePath.substring(fileNamePath.lastIndexOf("\\") + 1);
            File file = new File(fileNamePath);
            InputStream inputStream = new FileInputStream(file);
            byte[] data = new byte[] {};
            data = inputStreamToByte(inputStream);//将文件保存到字节数组中
            Carrier carrier = (Carrier) SpringContext.getBeanOfType(Carrier.class);
            carrier.setFileName(fileName);
            carrier.setContent(data);
            dao.create(carrier);

//将文件保存到字节数组中
    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;
    }

2、出库
byte data [] = new byte[]{};
        File file =null ;
        FileOutputStream fos = null;
        InputStream in = null;

        String hql = "select carrier from com.erry.tntops.acer.model.Carrier carrier where carrier.fileName=:fileName";
        Map map = new HashMap();
        map.put("fileName", fileName);
        Collection collection =  dao.retrieve(hql, map);
        if(collection != null && collection.size() > 0){
            Iterator it = collection.iterator();
            Carrier carrier = (Carrier) it.next();
            data = carrier.getContent();

        }
//导出成文件
        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();

还可以看看其他文章,谢谢您的阅读。
网站申明:系本文编辑转载,来源于网络,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,所有权归属原作者。如内容、图片有任何版权问题,请联系我们删除
上一篇:MySQL中varchar最大长度是多少?行长度限制:MySQL行的定义长度不能超过65535 下一篇:MySQL 正则表达式REGEXP的使用方法,MySQL的正则表达式匹配
更多相关的物流文章
IT编程技术  互联网  2023-10-07  浏览:6074次
IT编程技术  互联网  2022-11-24  浏览:9301次
IT编程技术  互联网  2022-11-17  浏览:9331次
IT编程技术  互联网  2022-11-14  浏览:9143次
IT编程技术  互联网  2022-11-06  浏览:9483次
IT编程技术  互联网  2022-11-05  浏览:9028次
IT编程技术  互联网  2022-10-28  浏览:9725次
正在被浏览的文章
【IT编程技术】热点文章
“扫一扫”微信公众号
好运物流网公众号二维码
关于好运物流网 - 联系好运网 - 物流公司查询 - 物流知道 - 帮助中心 - 网站地图
温馨提示:防范支招 安全警示:货运合作要有安全意识,需当面核实对方真实身份,要签订合同/协议、提供身份证等(防范支招)
免责声明:本站只起到物流信息平台作用,内容的准确性以及物流过程中出现的任何风险均由发布者负责,与平台无关。
好运物流网(haoyun56.com)  备案号:浙ICP备10210792号-4

浙公网安备 33080202000006号