Przesyłanie, wstawianie, pobieranie i wyświetlanie obrazu za pomocą JPA JSF MySql [zamknięte]

Zadaję to pytanie i zamierzam odpowiedzieć na pytanie, aby inni się nauczyli. Jest to dość proste i proste. Mam nadzieję, że to pomoże.

To jest to

Utwórz swoją jednostkę, na przykład klienta, za pomocą pola blob

@Entity
public class Customer implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Lob
    private byte[] logo;


//setter and getter required

Utwórz sesję Fasola, aby na przykład ułatwić komunikację z jednostką

@Stateless
public class CustomerService {
    @PersistenceContext(unitName = "ImageTestPU")
    private EntityManager em;

    public void persist(Object object) {
        em.persist(object);
    }


    public List<Customer> customerList(){
       return em.createNamedQuery(stat).getResultList();
    }

    public byte[] loadImage(int id){
        return em.find(Customer.class, id).getLogo();
    }

}

Utwórz swoją zarządzaną Bean. Zwróć uwagę naprivate UploadedFile uploadedFile; jego z

org.apache.myfaces.custom.fileupload.UploadedFile; co wyjaśnię później.

public class CustomerManager {
    @EJB
    private CustomerService customerService;
    private Customer customer = new Customer();
    private List<Customer> list;
    private DataModel<Customer> dataModel;
    private UploadedFile uploadedFile;

    public CustomerManager() {
    }
    public void createCustomer() throws IOException{
        customer.setId(0);
         byte[] file = uploadedFile.getBytes();
         customer.setLogo(file);
         customerService.persist(customer);
    }

    public void loadTable(){
         dataModel = new ListDataModel<Customer>();
        dataModel.setWrappedData(customerService.findStatus(customer));
    } 

    public String view(){
        customer = dataModel.getRowData();
        return "view.xhtml";
    }
//setter and getter for all
//use the loadTable method to load your model table

Utwórz klasę serwletu. Najważniejsze, aby wyświetlić swój obraz. Zwróć uwagę na następujące, są one najważniejsze

@WebServlet(name = "ImageServlet", urlPatterns = {"/ImageServlet"})

ma to na celu uniknięcie edycji pliku web.xml, to łatwiejsze, jeśli mnie o to zapytasz. po prostu pobierz adres URL pliku.

int id =Integer.parseInt(request.getParameter("id"));
        byte[] image = customerService.loadImage(id);

        response.setContentType("image/jpeg");
        ServletOutputStream outputStream = response.getOutputStream();
        outputStream.write(image);
        outputStream.close();

Powyższa linia wydaje się być oczywista. Nie martw się zbytnio oid będzie on używany do odwoływania się do obrazu w xhtml później.

więc pełny serwlet wygląda bardziej tak

@WebServlet(name = "ImageServlet", urlPatterns = {"/ImageServlet"})
public class ImageServlet extends HttpServlet {
    @EJB
    private CustomerService customerService;


    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {


        int id =Integer.parseInt(request.getParameter("id"));
        byte[] image = customerService.loadImage(id);

        response.setContentType("image/jpeg");
        ServletOutputStream outputStream = response.getOutputStream();
        outputStream.write(image);
        outputStream.close();
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

To jest plik xhtml create, który przesyła i zapisuje bajty obrazu w db

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:t="http://myfaces.apache.org/tomahawk">
    <h:head>
        <title> Title</title>
    </h:head>
    <h:body>
        <h:form id="uploadForm" enctype="multipart/form-data">
            <h:panelGrid columns="2">
                username :<h:inputText value="#{customerManager.customer.username}"/>
                Status :<h:inputText value="#{customerManager.customer.status}"/>
                <h:outputLabel for="file" value="Select file" />
                <t:inputFileUpload id="file" value="#{customerManager.uploadedFile}" required="true" />
                    <h:message for="file" style="color: red;" />

                    <h:commandButton value="Create" action="#{customerManager.createCustomer()}"/>
            </h:panelGrid>
        </h:form>
    </h:body>
</html>

To jest strona z listą, która zawiera twoje dane w db. jest on dołączony za pomocą łącza poleceń, które prowadzi do strony widoku

<h:dataTable value="#{customerManager.dataModel}" var="list">
            <h:column>
                #{list.id}
            </h:column>

            <h:column>
                <h:commandLink value="#{list.username}" action="#{customerManager.view}"  />

            </h:column>
        </h:dataTable>

Podsumowując, chciałbym, żeby to kiedyś komuś pomogło. I chciałbym, żeby ktoś poświęcił czas na rozwiązywanie problemów w najprostszy sposób, ponieważ wciąż mam mnóstwo pytań bez odpowiedzi, ale będę czytał dalej, kiedy będę miał rację, podzielę się nimi w najprostszy sposób dla ludzi takich jak ja. Dlaupload wcześniej wspomnij proszę, musisz pobrać do biblioteki tomahawk. Myślę, że ludzie lubią balusc na ten temat. Po prostu sprawił, że wyglądał na bardziej skomplikowany niż powinien. po prostu wybierz z bloga rzeczy, których potrzebujesz i użyj go. To dobry facet, bez sporu. Twoje zdrowie

questionAnswers(0)

yourAnswerToTheQuestion