Я позволяя пользователю загрузить файл и храню его как такНевозможно отобразить 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
Так что мой вопрос, в принципе, как я могу обеспечить путь к этим файлам, чтобы открыть их в кадре
Извините, этот ответ совсем не поможет. Это чересчур широкий и смутный бормотание беспорядочности. Если вы не можете конкретно ответить, но можете делать только выстрелы в темноте, отправьте комментарий вместо ответа. – BalusC
Извините ... будет помнить об этом. – Shiva