como cambiar la ruta

Pzone
29 de Marzo del 2010
Hola muy buenas, estoy haciendo un proyecto y necesito cargar ficheros pdf a la bd o en una ruta del servidor, lo que he encontrado ha sido lo del servidor, me funciona correctamente pero no se como elegir la carpeta de destino... como uso la libreria de apache FileUpload pienso que a lo mejor tengo que hacer algo dentro del ServletFileUpload, pero no lo encuentro, dejo el codigo porque a lo mejor esta a simple vista...

dejo el archivo .jsp que esta llamado por un form_action...

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<%@ page import="org.apache.commons.fileupload.*, org.apache.commons.fileupload.servlet.ServletFileUpload, org.apache.commons.fileupload.disk.DiskFileItemFactory, org.apache.commons.io.FilenameUtils, java.util.*, java.io.File, java.lang.Exception" %>


<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>File Upload Example</title>
</head>
<body>
<h1>Data Received at the Server</h1>
<hr/>
<p>
<%
if (ServletFileUpload.isMultipartContent(request)){
ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
List fileItemsList = servletFileUpload.parseRequest(request);
String optionalFileName = "";
FileItem fileItem = null;
Iterator it = fileItemsList.iterator();
while (it.hasNext()){
FileItem fileItemTemp = (FileItem)it.next();
if (fileItemTemp.isFormField()){
%>
<b>Name-value Pair Info:</b><br/>
Field name: <%= fileItemTemp.getFieldName() %><br/>
Field value: <%= fileItemTemp.getString() %><br/><br/>
<%
if (fileItemTemp.getFieldName().equals("guardaprova"))
optionalFileName = fileItemTemp.getString();
}
else
fileItem = fileItemTemp;
}
if (fileItem!=null){
String fileName = fileItem.getName();
%>
<b>Uploaded File Info:</b><br/>
Content type: <%= fileItem.getContentType() %><br/>
Field name: <%= fileItem.getFieldName() %><br/>
File name: <%= fileName %><br/>
File size: <%= fileItem.getSize() %><br/><br/>
<%
/* Save the uploaded file if its size is greater than 0. */
if (fileItem.getSize() > 0){
if (optionalFileName.trim().equals(""))
fileName = FilenameUtils.getName(fileName);
else
fileName = optionalFileName;
String dirName = "/guardats";
File saveTo = new File(dirName + fileName);
try {
fileItem.write(saveTo);
%>
<b>The uploaded file has been saved successfully.</b>
<%
}
catch (Exception e){
%>
<b>An error occurred when we tried to save the uploaded file.</b>
<%
}
}
}
}
%>
</p>
</body>
</html>

Gracias!

miguelromano
29 de Marzo del 2010
Hola, te marca algun error?? o solo no lo guarda en la ruta que escogiste??

Tu codigo se ve bien, puede ser que la ruta donde estas creando el File este mal, recuerda las convenciones para las rutas para crear archivos son absolutas, y debes tener permisos para escribir en el caso de que uses Unix/Linux, y en el caso de Windows, las rutas de preferencia deben ser con la barra invertida.

Saludos

Luis Avila
29 de Marzo del 2010
Hola me gustaria saber como obquirir los permisos en linux... yo tengo un servlet parecido, en mi pc me funciona bn, pero al momento de subirlo a un hosting me aparece la excepcion: java.security.AccessControlException: access denied (java.io.FilePermission /var/chroot/home/content/l/f/a/lfavila/html/red/archivos/fotito.pdf write)

te agradezco la ayuda...

pzone
29 de Marzo del 2010
Hola, gracias por contestar tan pronto,

No me da error, me funciona correctamente pero pasa una cosa que no entiendo...

tengo dos particiones puedo dirigir la ruta en el String dirName, pero sin nigun nivel, si pongo "C:/hola/ko/kop" me lo guarda en C/ fuera de todas las carpetas y si le digo
"D:/hola/ko/kop" pues me hace lo mismo en D:
y ya para metrlo en el localhost no me deja...

Si le pongo la dirección con la contrabarra me da como error "ilegal escape character"...

Dejo aqui el codigo de lo que me funciona a 1 nivel...

<%
/* Save the uploaded file if its size is greater than 0. */
if (fileItem.getSize() > 0){
if (optionalFileName.trim().equals(""))
fileName = FilenameUtils.getName(fileName);
else
fileName = optionalFileName;
String dirName = "C:/hola/ko/kop";
File saveTo = new File(dirName + fileName);
try {
fileItem.write(saveTo);
%>

gracias

mbarro
29 de Marzo del 2010
Prueba a poner la dirección con la barra invertida, pero doble, es decir: "C:\hola\ko\kop"
Recuerda que la barra invertida es una secuencia de escape ("n", "t",...) por lo que para especificarla en un String tienes que duplicarla.

Saludos

pzone
29 de Marzo del 2010
Perdona, estaba utilizando un codigo de un framework http://pdfforge.org/ y el problema va por otro lado,

Gracias por la colaboración.