Obrazy nie ładują się, jeśli są duże
Przechowuję obrazy w DB za pomocą MEDIUMBLOB. Kiedy próbuję załadować obraz przez serwlet, mogę zobaczyć te obrazy. Jeśli jednak rozmiar obrazu jest duży (1 MB lub więcej), widzę pół lub 3/4 obrazu w przeglądarce.
Kiedy ściągam ten sam obraz i umieszczam go w publicznej sieci web, działa on idealnie. Masz pomysł, jak rozwiązać ten problem? Czy muszę ustawić dowolną zmienną w serwletu lub MySQL?
Kod HTML (wygenerowany przez JSF) wygląda następująco:
<img src="DisplayImage?mainID=drawing" />
Serwlet obrazu wykonuje następujące czynności:
String imgLen = rs1.getString(1);
int len = imgLen.length();
byte[] rb = new byte[len];
InputStream readImg = rs1.getBinaryStream(1);
InputStream inputStream = readImg;
int index = readImg.read(rb, 0, len);
response.reset();
response.setHeader("Content-Length", String.valueOf(len));
response.setHeader("Content-disposition", "inline;filename=/file.png");
response.setContentType("image/png");
response.getOutputStream().write(rb, 0, len);
response.getOutputStream().flush();
Edytuj 1Kiedy używam poniższego kodu i zapisuję plik na dysku lokalnym, widzę pełny obraz.
String imgLen = rs1.getString(1);
int len = imgLen.length();
rb = new byte[len];
inputStream = rs1.getBinaryStream(1);
while ((read = inputStream.read(rb)) != -1) {
out.write(rb, 0, read);
}
out.flush();
out.close();
Edytuj 2Kiedy zapisuję na wpół oglądane obrazy, zauważyłem, że ich rozmiarobrazy to 100 KB. Mój 1 MB obrazu ma rozmiar 100 KB. Dzieje się tak ze wszystkimi obrazami :(
Myślę, że to największa wskazówka, co się dzieje. ALE nie dostaję tego, co jest nie tak.
Edytuj 3Jeśli usunę poniższe elementy z mojegoweb.xml
, Jestem w stanie wyświetlić te obrazy.
<filter>
<filter-name>MyFacesExtensionsFilter</filter-name>
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
Czy mogę je usunąć? Nie zbieram ponownie, dlaczego dokładnie dodałem te ...
Edytuj 4Mój plik web.xml to
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
60
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
<filter>
<filter-name>restrict</filter-name>
<filter-class>com.sac.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>restrict</filter-name>
<url-pattern>*.xhtml</url-pattern>
</filter-mapping>
<filter>
<filter-name>MyFacesExtensionsFilter</filter-name>
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<servlet>
<servlet-name>DisplayImage</servlet-name>
<servlet-class>com.sac.databean.DisplayImage</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayImage</servlet-name>
<url-pattern>/DisplayImage</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>SaveMyImage</servlet-name>
<servlet-class>com.sac.databean.SaveMyImage</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SaveMyImage</servlet-name>
<url-pattern>/SaveMyImage</url-pattern>
</servlet-mapping>
</web-app>