PDA

View Full Version : [JAVA/SERVLET] Upload di un file su server


config
22-08-2009, 15:54
Ciao a tutti.
Devo uploadare un file su un server, per fare questo chiamo una servlet ed utilizzo le com.oreilly.
Pare che funzioni, difatti selezionando un file tramite un form di tipo
<form ENCTYPE='multipart/form-data' action='../FileUpload' method='post'>
con l'oggetto con l'input type="file"
viene copiato il file nella directory specificata.
Il mio problema è che vorrei rinominare tale file con una stringa presa da un parametro che riesco a passare dalla pagina.jsp alla servlet.
toRename() mi restituisce sempre false e se provo a specificare un nome diverso da quello ottenuto dal form mi solleva un'eccezione.



import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.ServletUtils;

public class FileUpload extends HttpServlet {


public void doPost(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException {

String status = null;
String forw = null;

res.setContentType("text/plain");

MultipartRequest multi = new MultipartRequest(req,".");

String nf = req.getParameter("nf"); //stringa con cui vorrei rinominare il file

File f = multi.getFile("fimg"); //file da copiare

String fileName = multi.getFilesystemName("fimg");

if(nf==null)
nf=multi.getParameter("nf");

String type = multi.getContentType(fileName);

nf=nf+".jpg";

if (f!=null)
{
//fileName=nf + ".jpg"; //se cambio nome qui mi da eccezione
File fOUT = //new File(req.getContextPath(), fileName);
new File(req.getSession().getServletContext().getRealPath("/imgs/") , fileName);
FileInputStream fIS = new FileInputStream(f);
FileOutputStream fOS = new FileOutputStream(fOUT);
try{
while (fIS.available()>0)
fOS.write(fIS.read());

fOS.flush();
fIS.close();
fOS.close();
status="Operazione eseguita con successo";
}catch(Exception e)
{
status = " Errore nel caricamento file " + e.toString();
}

}

File file = new File(req.getSession().getServletContext().getRealPath("/imgs/") , fileName);

File file2 = new File(req.getSession().getServletContext().getRealPath("/imgs/") , nf);

boolean success= file.renameTo(file2);
//questo success mi da sempre false.


}
}



Non so davvero dove sbattere la testa :muro:

Grazie in anticipo per le risposte.