0

我使用 Glassfish 3.1.2.2、Sql Server 2005、PF 3.4 和 Mojarra 2.1.6。IDE Eclipse Juno。

我使用存储过程,并添加 jar commons-io.1.4 和 commons-fileupload.1.2.1

在数据库中,我们将所有文件(pdf、doc、xls 等)保存在 varbinary 中。 我有这些疑问:

  1. 如何使用p:fileupload上传任何文件(pdf、doc、xls 等)并在数据库中另存为varbinary文件?
  2. 如何使用p:FileDownload下载数据库的任何varbinary文件?
  3. 如何使用p:media显示 pdf,从数据库中恢复文件varbinary

一个问题

如何使用 p: fileupload 上传任何文件(pdf、doc、xls 等)并将它们保存到数据库中?

我不明白 p:fileupload,因为文档。我使用这个方法handlerFileUpload 来上传文件。Firsts 获取事件的 inputScream

<p:fileUpload fileUploadListener="#{fileBean.handleFileUpload}" />

public class FileBean {
    public void handleFileUpload(FileUploadEvent event) {
       UploadedFile file = event.getFile();
       //application code
    }
}

我使用了 file.getInputStream 并将存储过程发送到 BinaryStream setBinaryStream(4, inputStream, (int)inputStream.toString().getBytes().length);

这个好??

两个问题

如何使用p:FileDownload下载任何varbinary文件?

我使用 getBytes 恢复数据库以来的 varbinary。记住我使用存储过程。

此方法在具有请求范围的类中。

   public byte[] ArchivoBin(int CDTPEnlaceImagen, int iddoc) {
  Context();
  Null_Rs_and_Proc();
  Connection(0);
  PA(2, 51);

  [b]byte[] file = null;[/b]

  try {
     setProc(getCon().prepareCall(getCall()));
     getProc().setInt(1, CDTPEnlaceImagen);
     getProc().setInt(2, iddoc);

     setRs(getProc().executeQuery());
     getRs().next();

     [b]file = getRs().getBytes(1);[/b]
     System.out.println(file);
  }
  catch(SQLException e) {
     System.out.println("Exception ArchivoBin");
     System.out.println(e);
  }
  CloseConnections();

  return file;}

但是,当我以字节为单位获取文件时,我将一个字节转换为 inputcream,然后将 inputcream 转换为 DefaultStreamedContent。

这部分是一个具有请求范围的类。

byte[] bytes = null;
bytes = getRecuperarDatos().ArchivoBin(
               1, 
               idarchivo);

//Archivo is a Session Scope
getArchivo().setFile(new DefaultStreamedContent(
                  [b]new ByteArrayInputStream(bytes)[/b], 
                  "application/pdf", 
                  nomArchivo));

f:download没有得到正确的文件,它已损坏。

<h:commandButton value="Download">
           [b]<p:fileDownload value="#{archivo.file}"[/b] />
        </h:commandButton>

我不知道为什么这么糟糕

三个问题

如何使用p:media显示 pdf,从数据库中恢复varbinary 文件?

这类似于两个问题,p:media 说“加载 PDF 文档时发生错误”

4

1 回答 1

1

一切都解决了,当我将文件与方法内容一起保存在数据库中时。具体来说,与

public void SubirAlBaseDatos(FileUploadEvent e) {
  bytes[] file = e.getFile().getContents();

);

因此,我可以在 p:media 中显示,并在 p:filedownload 中下载。一些无关紧要的事情导致了这个问题。

感谢!!BalusC 为您的提示 来源

于 2012-11-18T22:38:33.193 回答