0

Glassfish 3.1.2.2、Sql Server 2005、PF 3.4、およびMojarra2.1.6を使用しています。IdeEclipseJuno。

ストアドプロシージャを使用し、jarcommons-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を表示し、データベースからファイルのバイナリを回復するにはどうすればよいですか?

一つの質問

p:fileuploadを使用してファイル(pdf、doc、xlsなど)をアップロードしてデータベースに保存するにはどうすればよいですか?

ドキュメント以来、私はp:fileuploadを理解していません。このメソッドhandlerFileUploadを使用して、ファイルをアップロードします。最初にイベントの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);を送信しました。

これはいい??

2つの質問

p:FileDownloadを使用して任意のバイナリファイルをダウンロードするにはどうすればよいですか?

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;}

しかし、ファイルをバイト単位で取得するときは、バイトをinputscreamに変換してから、inputscreamを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>

なぜこんなに悪いのかわからない

3つの質問

データベースからvarbinaryファイルを回復するp:mediaでPDFを表示するにはどうすればよいですか?

これは、2つの質問に似ています。p:mediaは「PDFドキュメントの読み込み中にエラーが発生しました」と言います

4

1 に答える 1

1

メソッドの内容とともにファイルをデータベースに保存すると、すべてが解決されます。具体的には、

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

);

したがって、p:mediaで表示し、p:filedownloadでdonwloadを表示できます。取るに足らない何かが問題を引き起こしていました。

感謝!!ヒントソースのBalusC

于 2012-11-18T22:38:33.193 に答える