2016-03-28 3 views
1

Я позволяя пользователю загрузить файл и храню его как такНевозможно отобразить PDF в IFRAME JSF

List<Meetingsattachment> mal= new ArrayList<Meetingsattachment>(); 
    meeting.setMeetingsattachments(mal); 

    Random rand=new Random(); 
    int num=Math.abs(rand.nextInt()); 
    String dirname="/path/to/files/"+meeting.getDescription()+"-"+num; 

    File dir= new File(dirname); 
    System.out.println(dir.getAbsolutePath()); 
    if(! dir.exists()) 
      dir.mkdir(); 

    for(UploadedFile uf:ufl){ 
     Meetingsattachment ma=new Meetingsattachment(); 
     ma.setAttachment(dirname+"/"+uf.getFileName()); 
     File file = new File(dirname+"/"+uf.getFileName()); 


      try (FileOutputStream fop = new FileOutputStream(file)) { 

       // if file doesn't exists, then create it 
       if (!file.exists()) { 
        file.createNewFile(); 
       } 

       // get the content in bytes 

       fop.write(IOUtils.toByteArray(uf.getInputstream())); 
       fop.flush(); 
       fop.close(); 
       meeting.addMeetingsattachment(ma); 
       System.out.println("Done"); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 


    } 

    int meetingid=mrm.addMeeting(meeting); 


    return "meetings?faces-redirect=true"; 

То, что я в основном делаю принимает файл хранить его на/путь/к/файлам/и затем хранить место в моей базе данных, поэтому значение в дБ как так

/path/to/files/t2-672409104/1.pdf

Я могу загрузить файл, так

Meetingsattachment ma=(Meetingsattachment) actionEvent.getComponent().getAttributes().get("attachment"); 
     //System.out.println("here "+form.getRqid()); 
     try{ 

     InputStream stream = new FileInputStream(new File(ma.getAttachment())); 
     String fl=ma.getAttachment(); 
     System.out.println(fl); 
     String filename=fl.split("/")[5]; 

     //System.out.println(ra.getRaid()); 
     setFile(new DefaultStreamedContent(stream,"application/pdf",filename)); 

в JSF

<ui:repeat var="meetattachment" value="#{meet.meetingsattachments}"> 
       <h:outputText value="#{meetattachment.attachment}" /> 

       <p:commandButton icon="ui-icon-arrowthickstop-1-s" 

         onclick="PrimeFaces.monitorDownload(showStatus, hideStatus)" 
         actionListener="#{meetBean.buttonAction}"> 
         <f:attribute name="attachment" value="#{meetattachment}"></f:attribute> 
         <p:fileDownload value="#{meetBean.file}" /> 
        </p:commandButton> 

Но когда я пытаюсь отобразить файл в IFRAME я просто получить ресурс IFrame выставочного не найден

<ui:repeat var="meetattachment" value="#{meet.meetingsattachments}"> 
       <h:outputText value="#{meetattachment.attachment}" />     
        <p:lightBox iframe="true"> 
        <h:outputLink value="#{meetattachment.getAttachment()}"> 
        preview2 
        </h:outputLink> 
        </p:lightBox> 


        <br /> 
      </ui:repeat> 

Значение, что ч: outputlink является Геттингом /path/to/files/t2-672409104/1.pdf

В застройщике webconsole я могу увидеть следующее сообщение об ошибке

GET 
http://localhost:8080/path/to/files/t2-672409104/1.pdf not found 

поэтому я думаю, что проблема - это путь, который он пытается использовать для поиска файла, из моего понимания, если я храню файл, используя относительный путь/путь/в/файлы, фактический путь к файлу - C: \ path \ к \ файлов

Я пытался жестко прописывать значение как таковые только для проверки

<h:outputLink value="C:\path\to\files\t2-672409104\1.pdf"> 

я получаю сообщение о том, что не может понять, протокол C

Так что мой вопрос, в принципе, как я могу обеспечить путь к этим файлам, чтобы открыть их в кадре

ответ

-1

Способ работы jsf отличается. Именно по этой причине вы получаете файл, который не найден. Если вы хотите открыть файл внутри iframe, вам нужно сделать некоторые дополнительные работы. Существует библиотека pdfjs, которую вы можете загрузить и использовать для отображения pdf внутри iframe. В праймерах есть компонент для этого. Вы можете использовать источник исходных текстов, чтобы узнать, как это делается. Если вам нужна дополнительная информация или полная ручная работа, пожалуйста, дайте мне знать.

+0

Извините, этот ответ совсем не поможет. Это чересчур широкий и смутный бормотание беспорядочности. Если вы не можете конкретно ответить, но можете делать только выстрелы в темноте, отправьте комментарий вместо ответа. – BalusC

+0

Извините ... будет помнить об этом. – Shiva