я не могу отобразить изображения из моей базы данных, они сохраняются как BYTEA и я их отображения, как это:Когда я использую O: graphicImage, изображение не отображается
@Entity
@Table(name = "photograph", schema = "public")
public class Photograph{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "photograph_id", unique = true, nullable = false)
private Long id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "diagnostic_id", nullable = false, insertable = false, updatable = false)
private Diagnostic diagnostic;
@Column(name = "photo", nullable = false)
private byte[] photo;
@Column(name = "photograph_description", nullable = false, length = 100)
private String photographDescription;
@Column(name = "photograph_content_type")
private String photographContentType;
//Getters and Setters...
}
можно хранить все изображения в базе данных без проблем. Проблема заключается в том, когда я хочу, чтобы показать их в р: DataTable так:
<p:dataTable id="dataTableLoadedPhotos"
value="#{imageController.photographListUpdate}" var="image">
<p:column headerText="Fotografías cargadas" width="110">
<o:graphicImage value="#{imageStreamer.getById(image.photographId)}"
alt="#{msgs['label.diagnostic.photograph.notFound']}" />
</p:column>
</p:dataTable>
Я использую косу, основанный на The BalusC Code: ImageServlet и я пытался использовать o:graphicImage без успеха, то не хватает в ми код:
@ManagedBean
@ApplicationScoped
public class ImageStreamer {
@EJB
private PhotographService photographService;
public byte[] getById(Long id) {
try {
return photographService.getContent(id);
} catch (ServiceException e) {
FacesMessage mensaje = new FacesMessage(
FacesMessage.SEVERITY_ERROR,
"Error al buscar la fotografía ", e.getMessage());
FacesContext.getCurrentInstance().addMessage(null, mensaje);
}
return null;
}
}
у меня также есть управляемый компонент с @RequestScoped:
@ManagedBean
@RequestScoped
public class ImageController {
@EJB
private PhotographService photographService;
@ManagedProperty(value = "#{diagnosticDataManager}")
private DiagnosticDataManager diagnosticDataManager;
private List<Photograph> photographListUpdate = new ArrayList<Photograph>();
private Photograph selectedPhoto;
/**
*
*/
public ImageController() {
diagnosticDataManager = new DiagnosticDataManager();
}
@PostConstruct
public void init() {
if (diagnosticDataManager.getDiagnostic().getDiagnosticId() != null)
photographListUpdate = photographService
.findPhotosByDiagnostic(diagnosticDataManager
.getDiagnostic());
for (Photograph photograph : photographListUpdate) {
byte[] imageContent = org.apache.commons.codec.binary.Base64
.decodeBase64(photograph.getPhoto());
ExternalContext ec = FacesContext.getCurrentInstance()
.getExternalContext();
ec.getSessionMap()
.put(photograph.getId().toString(),
imageContent);
}
}
// Getters and setters....
}
я видеть только две строки в р: DataTable, соответствующие изображения с предустановленными без изображения, просто сообщение «ALT» атрибут O: graphicImage показана
Используя Firebug я только увидеть это на каждую строке:
<img alt="Imagen no encontrada" src="/patientdiagnostics/javax.faces.resource/ImageStreamer_getById.xhtml?ln=omnifaces.graphic&v=0&p=7">
я пытался что-то похожее на Display database blob images in <p:graphicImage> inside <ui:repeat>
Я использую ap: fileUpload для сохранения изображения в БД, метод init() имеет 'byte [] imageContent = org.apache.commons.codec.binary.Base64 .decodeBase64 (photograph.getPhoto());' потому что я видел в другом questión, я не уверен, что изображения хранятся в байтах с base64-кодированием, я просто загружаю jpg-образ в db, поэтому я должен был декодировать это из-за размера изображения, что может быть правильно? –
Я удалил все файлы base64, я все еще вижу '' и в сети браузера я вижу 'http: // localhost: 8080/patientdiagnostics/javax.faces.resource/ImageStreamer_getById.xhtml? Ln = omnifaces.graphic & v = 0 & p = 7' , он имеет столбец, который говорит 200 OK (BFCache).Если вам нужно увидеть метод, который я использую для сохранения изображений в моем db, сообщите мне –
Firefox и JPG –