Estou com uma dúvida: se é possível fazer um upload de 1, 2 ou mais arquivos de uma vez usando jsp ou servlet.
O upload de um arquivo por vez, consegui realizar.
Estou com uma dúvida: se é possível fazer um upload de 1, 2 ou mais arquivos de uma vez usando jsp ou servlet.
O upload de um arquivo por vez, consegui realizar.
e possivel sim!
coloque assim na servlet
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
abrax
mauricio adl, como que eu faço para selecionar os diversos arquivos? aí é um problema… já no primeiro jsp
index.jsp
<html>
<head>
</head>
<body>
<h1>Exemplo Upload com Servlet (upload.java)</h1>
<% String id = "1"; %>
<form action="servlet/upload" method="post" ENCTYPE="multipart/form-data">
<input type="hidden" name="id" value="<%=id%>">
<input type="file" name="file" id="file" size=100>
<input type="submit" value="Enviar">
</form>
</body>
</html>
upload.class
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class upload extends HttpServlet {
private static List parseRequest(HttpServletRequest request) {
throw new UnsupportedOperationException("Not yet implemented");
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String codigo = request.getParameter("id");
String nomeParametro = "file";
String id = request.getParameter(nomeParametro);
//out.println("O código da páigna é: "+codigo); // imprime id nula
File dir = new File(getServletContext().getRealPath("/")+ "eventos");
String contentType = request.getContentType();
if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) {
DataInputStream in = new DataInputStream(request.getInputStream());
int formDataLength = request.getContentLength();
byte dataBytes[] = new byte[formDataLength];
int byteRead = 0;
int totalBytesRead = 0;
while (totalBytesRead < formDataLength) {
byteRead = in.read(dataBytes, totalBytesRead, formDataLength);
totalBytesRead += byteRead;
}
String file = new String(dataBytes);
String saveFile = file.substring(file.indexOf("filename=\"") + 10);
saveFile = saveFile.substring(0, saveFile.indexOf("\n"));
saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\""));
int lastIndex = contentType.lastIndexOf("=");
String boundary = contentType.substring(lastIndex + 1,contentType.length());
int pos;
pos = file.indexOf("filename=\"");
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
int boundaryLocation = file.indexOf(boundary, pos) - 4;
int startPos = ((file.substring(0, pos)).getBytes()).length;
int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;
String filepath = dir+ "/" +saveFile;
FileOutputStream fileOut = new FileOutputStream(filepath);
fileOut.write(dataBytes, startPos, (endPos - startPos));
fileOut.flush();
fileOut.close();
out.println("Arquivo transferido com sucesso!"); // imprime id nula
}
} finally {
out.close();
}
}
// <editor-fold defaultstate="collapsed" desc="Métodos HttpServlet. Clique no sinal de + à esquerda para editar o código.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*/
@Override
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
tem q colocar o multiple
<input type="file" multiple />
coloquei da seguinte maneira:
<input type="file" name="arquivo[]" size="150" tabindex="15" accesskey="2" multiple accept="xml/*">
No firefox e google chrome seleciona mais de 1 arquivo, mas no IE não dá certo!!!
isso tem solução?
se nao me engano file multiple eh do html5 e o lixo do IE nao tem suporte.
morte ao IE
[]'s
valeu maurcioadl pela ajuda, somente no IE não funcionou a seleção multipla de arquivos…
Alguém tem 1 dica ou solução para este poblema?
[quote=Paezani]valeu maurcioadl pela ajuda, somente no IE não funcionou a seleção multipla de arquivos…
Alguém tem 1 dica ou solução para este poblema?[/quote]
Cara, como eu disse, o IE não tem suporte a isso, uma solução “elegante” eh fazer como o facebook faz, acessa o upload de fotos dele pelo IE que vc vai ver.
[]'s