Gelera,
Estou com algumas dúvidas em relação a salvar um arquivo selecionado em um diretório específico:
No meu note book quando rodo o servidor executando o código abaixo, ele salva o arquivo na pasta c:\upload e depois é recuperado para executar o restante do código, funciona blz!
O problema é que agora preciso migrar esse meu projeto para outro servidor, e ai que está o problema, pq quando passei o projeto para o servidor ele ao invés de buscar dentro da pasta c:upload, ele está indo para para outro diretório e me retornando o erro abaixo:
Erro:java.sql.SQLException: File 'C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\Data\upload\Base-campanhas.csv' not found (Errcode: 2)
alguém poderia me dar uma breve explicação de como fazer isso? ao invés do c: preciso colocar um caminho em comun na rede?
Segue o servlet que estou usando:
package Controlador;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import java.util.*;
//import javax.enterprise.deploy.spi.status.ProgressEvent;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.ProgressListener;
import sun.net.ProgressEvent;
/**
*
* @author Belchior
*/
@WebServlet(name = "UploadFile", urlPatterns = {"/UploadFile"})
public class UploadFile extends HttpServlet {
private long yourMaxRequestSize;
String path = "c:\\upload";
private ProgressListener progressListener = new ProgressListener() {
private long megaBytes = -1;
public void update(long pBytesRead, long pContentLength, int pItems) {
long mBytes = pBytesRead / 1000000;
if (megaBytes == mBytes) {
return;
}
megaBytes = mBytes;
System.out.println("We are currently reading item " + pItems);
if (pContentLength == -1) {
System.out.println("So far, " + pBytesRead + " bytes have been read.");
} else {
System.out.println("So far, " + pBytesRead + " of " + pContentLength
+ " bytes have been read.");
}
}
public void handleProgressEvent(ProgressEvent event) {
throw new UnsupportedOperationException("Not supported yet.");
}
};
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, FileUploadException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
int yourMaxMemorySize = 100 * (1024*1000); // 25 megas
yourMaxRequestSize = yourMaxMemorySize;
File yourTempDirectory = null;
yourTempDirectory = new File(path);
// Create a factory for disk-based file items
// FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
// ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
// List /* FileItem */ items = upload.parseRequest(request);
// Create a factory for disk-based file items
DiskFileItemFactory factoryDisk = new DiskFileItemFactory();
// Set factory constraints
factoryDisk.setSizeThreshold(yourMaxMemorySize);
factoryDisk.setRepository(yourTempDirectory);
out.println("Repositorio..");
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factoryDisk);
upload.setProgressListener(progressListener);
// Set overall request size constraint
upload.setSizeMax(yourMaxRequestSize);
// Parse the request
List /* FileItem */ items = upload.parseRequest(request);
out.println("upload parse Request");
// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext()) {
System.out.println("iterator");
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
processFormField(item);
} else {
try {
processUploadedFile(item);
request.getRequestDispatcher("ImportarXls?url="+item.getName()).forward(request, response);
} catch (Exception ex) {
Logger.getLogger(UploadFile.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
//Create a progress listener
}catch(Error e){
out.println("Erro:"+ e);
}
finally {
out.println("Finalizou");
out.close();
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (FileUploadException ex) {
Logger.getLogger(UploadFile.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (FileUploadException ex) {
Logger.getLogger(UploadFile.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Returns a short description of the servlet.
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
private void processFormField(FileItem item) {
System.out.println("processFormField");
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
System.out.println(fieldName);
}
private void processUploadedFile(FileItem item) throws Exception {
try {
String name = item.getFieldName();
boolean writeToFile = false;
System.out.println("processUploadedFile");
System.out.println("File field " + name + " with file name " + item.getName() + " detected.");
// Process the input stream
// Process a file upload
if (writeToFile) {
File uploadedFile = new File(path+"\\"+item.getName());
item.write(uploadedFile);
} else {
InputStream uploadedStream = item.getInputStream();
// write the inputStream to a FileOutputStream
OutputStream out = new FileOutputStream(new File(path+"\\"+item.getName()));
int read = 0;
byte[] bytes = new byte[1024];
while ((read = uploadedStream.read(bytes)) != -1) {
out.write(bytes, 0,read);
}
uploadedStream.close();
out.flush();
out.close();
System.out.println("arquivo enviado com sucesso");
}
} catch (IOException ex) {
Logger.getLogger(UploadFile.class.getName()).log(Level.SEVERE, null, ex);
}
}
}