2012-11-18 2 views
0

나는 Glassfish 3.1.2.2, Sql Server 2005, PF 3.4 및 Mojarra 2.1.6을 사용합니다. Ide Eclipse Juno.varbinary 파일을 다운로드, 업로드 및 표시 할 수 있습니까? Primefaces 3.4 - fileupload - filedownload - media

내가 저장 프로 시저를 사용하고 항아리 평민 - io.1.4과 평민 - fileupload.1.2.1 데이터베이스에서

, 우리는 VARBINARY에있는 모든 파일 (PDF, 문서, XLS 등)을 저장할 추가합니다.

  1. 내가 (등 PDF, 문서, XLS,) 어떤 파일을 업로드 할 수있는 방법페이지로 : 나는이 의심이 파일 업로드을하고 데이터베이스VARBINARY 파일로 저장? 하면 FileDownload : 나는 페이지로 데이터베이스VARBINARY 파일을 다운로드 할 수 있습니다 방법
  2. ? 데이터베이스에서 파일 VARBINARY 복구 미디어 : 나는 페이지에 PDF 파일을 표시 할 수 있습니다 방법
  3. ?

ONE 질문 내가 어떤 페이지와 파일 (PDF, 문서, XLS 등) 업로드 할 수있는 방법

: 파일 업로드를하고이 데이터베이스에 저장?

필자는 문서화 이후 p : fileupload를 보지 못했습니다. 파일 업로드를 위해이 메소드 (handlerFileUpload)를 사용합니다. 최초 내가 BinaryStream setBinaryStream과 (.. 4, inputStream을, (int)를 inputStream.toString() getBytes() 길이) file.getInputStream를 사용하여 저장 프로 시저를 전송

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

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

이벤트의 inputScream를 얻을;

이것은 좋은가 ??

두 질문 내가 P 어떤 VARBINARY 파일을 다운로드 할 수 있습니다 방법

:하면 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 : 파일이 정확하지 다운로드는, 그것은 손상되었습니다.

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

나도 몰라 왜 나쁜

세 질문

내가 페이지에 PDF 파일을 표시 할 수 있습니다 방법 : 데이터베이스에서 VARBINARY 파일을 복구, 미디어?

이 두 질문과 유사하다, p는 : 미디어 내가 방법을 내용으로 데이터베이스에 파일을 저장할 때

+0

큰 수있는 데이터베이스에 파일을 저장하면 안됩니다. 대신 디스크에 파일을 저장하고 파일 위치를 데이터베이스에 저장하십시오. 프로/죄악에 대해서는 [here] (http://stackoverflow.com/questions/211895/)를 참조하십시오. – siebz0r

+0

우리는 파일별로 1MB를 저장합니다. – fylex

답변

1

모두가 해결된다 "PDF 문서를로드하는 동안 오류가 발생했습니다" 을 말한다. , I는 P에 따라서 표시 할 수

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

); 

함께 구체적 : 미디어 및 donwload를 P에서 :하면 FileDownload한다. 뭔가 사소한 것이 문제의 원인이었습니다.

감사합니다. 귀하의 조언을위한 BalusC source

관련 문제