2010-12-03 20 views
5

Tengo el siguiente código que maneja la carga de archivos en el servidor. Pero cómo guardar el archivo en una ubicación específica en el servidorGuardar archivo cargado en una ubicación específica

import gwtupload.server.UploadAction; 
import gwtupload.server.exceptions.UploadActionException; 

import org.apache.commons.fileupload.FileItem; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.util.Hashtable; 
import java.util.List; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 




/** 
* This is an example of how to use UploadAction class. 
* 
* This servlet saves all received files in a temporary folder, 
* and deletes them when the user sends a remove request. 
* 
* @author Manolo Carrasco Moñino 
* 
*/ 
public class SampleUploadServlet extends UploadAction { 

    private static final long serialVersionUID = 1L; 

    Hashtable<String, String> receivedContentTypes = new Hashtable<String, String>(); 
    /** 
    * Maintain a list with received files and their content types. 
    */ 
    Hashtable<String, File> receivedFiles = new Hashtable<String, File>(); 

    /** 
    * Override executeAction to save the received files in a custom place 
    * and delete this items from session. 
    */ 
    @Override 
    public String executeAction(HttpServletRequest request, List<FileItem> sessionFiles) throws UploadActionException { 
    String response = ""; 
    int cont = 0; 
    for (FileItem item : sessionFiles) { 
     if (false == item.isFormField()) { 
     cont++; 
     try { 
      /// Create a new file based on the remote file name in the client 
      // String saveName = item.getName().replaceAll("[\\\\/><\\|\\s\"'{}()\\[\\]]+", "_"); 
      // File file =new File("/tmp/" + saveName); 

      /// Create a temporary file placed in /tmp (only works in unix) 
      // File file = File.createTempFile("upload-", ".bin", new File("/tmp")); 

      /// Create a temporary file placed in the default system temp folder 
      File file = File.createTempFile("upload-", ".bin"); 
      item.write(file); 

      /// Save a list with the received files 
      receivedFiles.put(item.getFieldName(), file); 
      receivedContentTypes.put(item.getFieldName(), item.getContentType()); 

      /// Compose a xml message with the full file information 
      response += "<file-" + cont + "-field>" + item.getFieldName() + "</file-" + cont + "-field>\n"; 
      response += "<file-" + cont + "-name>" + item.getName() + "</file-" + cont + "-name>\n"; 
      response += "<file-" + cont + "-size>" + item.getSize() + "</file-" + cont + "-size>\n"; 
      response += "<file-" + cont + "-type>" + item.getContentType() + "</file-" + cont + "type>\n"; 
     } 
     catch (Exception e) 
     { 
     } 
     } 
    } 

    /// Remove files from session because we have a copy of them 
    removeSessionFileItems(request); 

    /// Send information of the received files to the client. 
    return "<response>\n" + response + "</response>\n"; 
    } 

    /** 
    * Get the content of an uploaded file. 
    */ 
    @Override 
    public void getUploadedFile(HttpServletRequest request, HttpServletResponse response) throws IOException { 
    String fieldName = request.getParameter(PARAM_SHOW); 
    File f = receivedFiles.get(fieldName); 
    if (f != null) { 
     response.setContentType(receivedContentTypes.get(fieldName)); 
     FileInputStream is = new FileInputStream(f); 
     copyFromInputStreamToOutputStream(is, response.getOutputStream()); 
    } else { 
     renderXmlResponse(request, response, ERROR_ITEM_NOT_FOUND); 
    } 
    } 

    /** 
    * Remove a file when the user sends a delete request. 
    */ 
    @Override 
    public void removeItem(HttpServletRequest request, String fieldName) throws UploadActionException { 
    File file = receivedFiles.get(fieldName); 
    receivedFiles.remove(fieldName); 
    receivedContentTypes.remove(fieldName); 
    if (file != null) { 
     file.delete(); 
    } 
    } 

} 

Respuesta

9

Debe utilizar File#createTempFile() which takes a directory lugar.

File file = File.createTempFile("upload-", ".bin", new File("/path/to/your/uploads")); 
item.write(file); 

O si en realidad se desea mover el archivo temporal a otro lugar después , utilice File#renameTo().

File destination = new File("/path/to/your/uploads", file.getName()); 
file.renameTo(destination); 
1

En su aplicación Java, puede crear archivos con una ruta específica.

Me gusta; "Nuevo archivo (" c:/archivos/nombre de archivo)". Etc.

Ver Java Documents para aprender sobre Nueva IO del paquete de archivos de clase método Createfile

+0

Esto arrojaría IO Excepción si "c:/archivos" el directorio no existe. asegúrese de que el nuevo archivo ("c:/files"). mkdirs(); si no existe. –

+0

@ dubey-theHarcourtians vea la respuesta aceptada;) publicado hace 6 años y sí, usted tiene razón. En realidad con java 1.7 Clase de archivos y método createFile agregado y también lanza IOException si el directorio padre no existe –

Cuestiones relacionadas