有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数据库可以保存从http读取的zip文件并直接将其保存到数据库,而无需在java中物理创建它

我正在从url读取zip文件,现在我想直接将其保存到数据库中,而不用使用java和hibernate进行物理存储

我读的是zip文件

    URLConnection  uCon = null;
    URL Url;
    byte[] buf;     
    ZipOutputStream outStream = new ZipOutputStream(new FileOutputStream("mytest.zip"));
    Url= new URL(http://xyz.com/pages/info.doc);
    uCon = Url.openConnection();
    is = uCon.getInputStream();
    buf = new byte[size];
    is = uCon.getInputStream();
    outStream.putNextEntry(new ZipEntry("info.doc"));
    while ((ByteRead = is.read(buf)) != -1) 
              {     
    outStream.write(buf, 0, ByteRead);
    ByteWritten += ByteRead;
    }
    is.close();
    outStream.close();

我不想在创建“mytest.zip”后将其物理保存,我想将其直接保存在DB中?可能吗?如何做到这一点

提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    使用管道来保持低内存需求——setBlob(colunm,InputStream)——并使用IOUtils。复制以进行快速复制

        PipedOutputStream pipeOut = new PipedOutputStream();
        PipedInputStream pipeIn = new PipedInputStream(pipeOut);
    
        setBlob(pipeIn);
    
        ZipOutputStream zipOut = new ZipOutputStream(pipeOut, Charset.forName("UTF-8"));
        zipOut.putNextEntry(new ZipEntry("info.doc"));
        IOUtils.copy(sourceIn, zipOut); // org.apache.commons.io.IOUtils;
        zipOut.closeEntry();
        zipOut.close();
    

    这仍然没有try,第二个线程就好了

  2. # 2 楼答案

    是的,有可能。写到ByteArrayOutputStream而不是写到FileOutputStream。使用ByteArrayOutputStreamgetBytes()方法获取内存中包含zip文件字节的字节数组

    创建一个准备好的语句,就像在数据库表中插入任何类型的数据一样,并使用其setBinaryStream()setBlob()方法用字节数组的内容填充其中一列。只需将ByteArrayInputStream(以字节数组作为参数构造)传递给其中一个方法