Cuma, Kasım 20, 2009

java servlet ile dosya görüntüleme

Jsf veya java nın başka bir teknolojisini kullandığımızda servlete ihtiyaç duyduğumuz zamanlar çok olur. Bu durumlardan bir tanesi de veritabanından veya herhangi bir path'ten aldığımız dosyaları uygulama içinde göstermektir. pdf, doc, excel, jpeg gif veya başka herhangi bir dosya türünü bu şekilde servlet içine okuyarak gösterebiliriz. aşağıda jsf de kullanılan buna ilişkin bir örnek var. bu örnekte pdf dosya türü okunmuştur.
public class MyStoredFiles extends HttpServlet implements Servlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Connection conn = null;
ResultSet rs = null;
PreparedStatement pstmt = null;
InputStream is = null;
String fileName="",mimeType="";

String fileid=request.getParameter("fileid");
String tmpPath = System.getProperty("tmpfilepath");
try {
String sql = "select * from storedfiles where fileid=?";
conn = OraManager.getConnection(this);
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, fileid);
rs = pstmt.executeQuery();
if (rs.next()) {
fileName=rs.getString("filename");
mimeType=rs.getString("content_type");
//write it to the temp area
java.io.File file = new java.io.File(tmpPath+fileName);
FileOutputStream fos = new FileOutputStream(file);
is = rs.getBinaryStream("data");
byte[] buffer = new byte[1000];
while (is.read(buffer) > 0) {
fos.write(buffer);
}
fos.close();

BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
// Get image contents.
byte[] bytes = new byte[in.available()];
in.read(bytes);
in.close();

response.setContentType("application/pdf");
response.addHeader("Content-Disposition", "inline;filename=\""+fileName+"\"");

// Write image contents to response.
response.getOutputStream().write(bytes);

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

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

Bu örnekte link ile gelen paramterelere göre veritabanından dosya çekiyoruz.
Bu servletimzi web.xml de tanımlamamız gerekiyor;
<servlet>
<description></description>
<display-name>MyStoredFiles</display-name>
<servlet-name>MyStoredFiles</servlet-name>
<servlet-class>org.test.servlet.MyStoredFiles</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyStoredFiles</servlet-name>
<url-pattern>/showstoredfile</url-pattern>
</servlet-mapping>


jsp sayfasında görüntüleme is şöyle olabilir;
<h:commandLink value="#{file.name}" 
onclick="javascript:window.open(root_folder+'/showpffile?fileid=#{file.fileId}','popupWindow', 'dependent=yes,menubar=no,toolbar=no,location=no,resizable=1,scrollbars=yes');">
</h:commandLink>

1 yorum:

  1. Merhaba
    Yazınızda "pdf, doc, excel, jpeg gif veya başka herhangi bir dosya türünü" ekranda gösterebileceğimizi yazmışsınız. Fakat application/pdf tanımlı olduğu için burada word veya excel dokumanları gorunmuyor. Bunları gosterebılmek için application type ne olmalı ?

    Teşekkürler...

    YanıtlaSil