ugrás a tartalomhoz

szervlet/jsp és file feltöltés hogyan?

troy1979 · 2010. Május. 26. (Sze), 12.12
Sziasztok,

Az érdekelne hogy hogy müködik a webes file feltöltés a jsp/szervletek esetében

- Milyen konfigurációs beállitások vannak? ( max fileméret , max feltöltési idő stb)
- Mit/hol/hogyan kell beállitanom?
- Ezek a beálliástások webszerverhez kötöttek vagy attól függetlenek? (pl a web.xml-ben vagy valamilyen más egyéb konfigurációs file-ban kell beállitanom valamit)

Apache tomcat-et használok , ha ez segit valamit

Azt már tudom, hogy php-ben hogy müködnek ezek a dolgok, és ahogy eddig utána néztem, google azt mutatja, hogy java-ban eléggé másképp müködnek ezek a dolgok (sajnos vagy nem sajnos)

Szóval jól jönne némi segitség/info hogy mit/hol/hogyan :)

OP
 
1

egész pontosan tomcat 6.0-át

troy1979 · 2010. Május. 26. (Sze), 12.28
egész pontosan tomcat 6.0-át használok
( nem tudom, hogy mennyire számit ez/mekkorák a külömbségek az egyes tomcat verziók között)
2

Remélem érthető lesz

YourSoft · 2010. Jún. 16. (Sze), 10.06
Egy teszt szervlet (Apache commons fileuploadot használ):

import java.io.ByteArrayOutputStream;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import java.util.*;
//import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public final class TestUpload extends HttpServlet {

private DataSource _poolWF = null;

//~--- methods ------------------------------------------------------------
/**
* Szervlet példányonként egyszer elvégzendő feladatok.
* @throws ServletException Ha hiba van a létrehozásakor ezt a kivételt dobja.
*/
@Override
public void init() throws ServletException {
InitialContext initCtx = null;

try {
initCtx = new InitialContext();
_poolWF =
(DataSource) initCtx.lookup("java:comp/env/jdbc/workflow");
} catch (Exception e) {
throw new ServletException("no datasource found " + e);
}
}

@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {

try {
// PrintWriter out = response.getWriter();

// response.setContentType("text/html");
// out.write("<html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>File Upload Example</title></head>");
// out.write("<body><h1>Data Received at the Server</h1><hr /><p>");

boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
List fileItemsList = servletFileUpload.parseRequest(request);

FileItem fileItem = null;

Iterator it = fileItemsList.iterator();
while (it.hasNext()) {
FileItem fileItemTemp = (FileItem) it.next();
if (fileItemTemp.isFormField()) {
} else {
fileItem = fileItemTemp;
}
}

if (fileItem != null) {
String fileName = fileItem.getName();

// out.write("<b>Uploaded File Info:</b><br/>Content type: ");
// out.print(fileItem.getContentType());
// out.write("<br/>Field name: ");
// out.print(fileItem.getFieldName());
// out.write("<br/>File name: ");
// out.print(fileName);
// out.write("<br/>File size: ");
// out.print(fileItem.getSize());
// out.write("<br/><br/>");

Connection con = _poolWF.getConnection();
PreparedStatement pstm = con.prepareStatement("INSERT INTO pdfs (file_name, bin_data, content_type) VALUES (?, ?, ?)");
pstm.setString(1, fileName);
pstm.setBinaryStream(2, fileItem.getInputStream(), (int) fileItem.getSize());
pstm.setString(3, fileItem.getContentType());
pstm.executeUpdate();

/* Save the uploaded file if its size is greater than 0. */
// if (fileItem.getSize() > 0) {
// fileName = FilenameUtils.getName(fileName);
//
// String dirName = getServletContext().getRealPath("/file_uploads/");
//
// File saveTo = new File(dirName + "/" + fileName);
// try {
// fileItem.write(saveTo);
// out.write("<b>The uploaded file has been saved successfully.</b>");
// } catch (Exception e) {
//
// out.write("<b>An error occurred when we tried to save the uploaded file.</b>");
// }
// }
pstm = con.prepareStatement("SELECT max(id) FROM pdfs");
ResultSet rs = pstm.executeQuery();
if (rs.next()) {
int i = rs.getInt(1);
pstm = con.prepareStatement("SELECT * FROM pdfs WHERE id=?");
pstm.setInt(1, i);
rs = pstm.executeQuery();

if (rs.next()) {
byte[] fileContent = rs.getBytes("bin_data");
String cType = rs.getString("content_type");

ByteArrayOutputStream pdf = null;
final ServletOutputStream sos = response.getOutputStream();

try {
response.setHeader("Content-type", cType);
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
pdf = new ByteArrayOutputStream(fileContent.length);
pdf.write(fileContent, 0, fileContent.length);
response.setContentLength(pdf.size());
pdf.writeTo(sos);
sos.flush();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (pdf != null) {
pdf.reset();
}
sos.close();
pdf.close();
}
}
}

con.close();
}
}

// out.write("</p></body></html>");
} catch (Throwable t) {
t.printStackTrace();
}
}

@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
doGet(request, response);
}
}

Valamint a Tomcat Server.xml-jébe is úgy emlékszem lehet állítgatni, hogy mekkora a max. mérete a feltöltésnek.