Preciso fazer upload de arquivo do cliente para o servidor.
o cliente escolherá um arquivo em sua máquina e este será gravado no servidor.
Depois de muito pesquisar, consegui encontrar a solução abaixo, mas ele só consegue fazer corretamente se eu escolher um arquivo .txt, se escolher um .doc ou um .pdf, o arquivo é gravado mas não abre.
public class DocumentoUploadServletOLD extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final int SIZE_MAX = 50000*1024*1024;
private static final File REPOSITORIO = new File("C:/Java/");
/**
* @see HttpServlet#HttpServlet()
*/
public DocumentoUploadServletOLD() {
super();
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(SIZE_MAX);
factory.setRepository(REPOSITORIO);
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
String nomeArquivo = extractFilename(item.getName());
System.out.println("item.getFieldName(): "+item.getFieldName());
System.out.println("item.getName(): "+item.getName());
System.out.println("item.getString(): "+item.getString());
} else {
String realName = extractFilename(item.getName());
String value = item.getString();
File uploadedFile = new File(REPOSITORIO+"\\"+realName);
FileOutputStream fos = new FileOutputStream(uploadedFile);
fos.write(value.getBytes());
fos.close();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/documentosUploadArquivo.jsp");
dispatcher.forward(request, response);
}
private String extractFilename(String filePathName) {
if (filePathName == null)
return null;
int dotPos = filePathName.lastIndexOf( '.' );
int slashPos = filePathName.lastIndexOf( '\\' );
if ( slashPos == -1 )
slashPos = filePathName.lastIndexOf( '/' );
if ( dotPos > slashPos ) {
return filePathName.substring( slashPos > 0 ? slashPos + 1 : 0);
}
return filePathName.substring( slashPos > 0 ? slashPos + 1 : 0 );
}