(UPLOAD) Hora funciona, hora num funciona

2 respostas
T

O erro, q as vezes dá, é esse:

org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:359)
	at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
	at equus.news.controle.imagens.UploadImagem.execute(UploadImagem.java:51)
	at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java: 58 )
	at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
	at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)

at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
	at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.commons.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly
	at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:964)
	at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:887)
	at java.io.InputStream.read(Unknown Source)
	at org.apache.commons.fileupload.util.Streams.copy(Streams.java:94)
	at org.apache.commons.fileupload.util.Streams.copy(Streams.java:64)
	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:354)
	... 27 more

Eu já li e reli minha Action q faz o upload e não tem motivos para isso… segue ela:

package equus.news.controle.imagens;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;

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

import org.apache.commons.fileupload.FileItem;
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 org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import equus.news.modelo.Cliente;
import equus.news.utils.url.ObjetoURL;

public class UploadImagem extends Action {
	
	private String caminho = null;
	
	public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws Exception {
		
		String node = req.getParameter("node");
		
		if (node.equals("") || node == null || node.equalsIgnoreCase("clienteSessao")) {
			Cliente cliente = (Cliente)req.getSession().getAttribute("clienteDaSessao");
			caminho = req.getSession().getServletContext().getRealPath("/imagens/") + "/" + cliente.getId() + "/";
		} else {
			caminho = req.getSession().getServletContext().getRealPath("/imagens/") + "/" + node + "/";
		}

		boolean isMultiPart = ServletFileUpload.isMultipartContent(req);
		
		if (isMultiPart) {

			FileItemFactory factory = new DiskFileItemFactory();

			ServletFileUpload upload = new ServletFileUpload(factory);

			try {

				List items = upload.parseRequest(req);
				
				Iterator iter = items.iterator();

				while (iter.hasNext()) {

					FileItem item = (FileItem) iter.next();

					if (!item.isFormField()) {

						if (item.getName().length() > 0) {

							this.inserirImagemDiretorio(item);
							req.setAttribute("msg", "Ok, Upload terminado.");

						}

					}

				}

			}

			catch (FileUploadException e) {
				e.printStackTrace();
				req.setAttribute("msg", "Erro, Processo falhou.(1)");

			}

			catch (Exception e) {
				e.printStackTrace();
				req.setAttribute("msg", "Erro, Processo falhou.(2)");

			}

		}

		return map.findForward("ajax");
	}

	private void inserirImagemDiretorio(FileItem item) throws IOException {

		File diretorio = new File(caminho);

		if (!diretorio.exists()) {

			diretorio.mkdir();

		}

		String nome = item.getName();

		String arq[] = nome.split("\\\\");

		for (int i = 0; i < arq.length; i++) {

			nome = arq[i];

		}

		File file = new File(diretorio, ObjetoURL.removeAcentos(ObjetoURL.decode(nome)));

		FileOutputStream output = new FileOutputStream(file);

		InputStream is = item.getInputStream();

		byte[] buffer = new byte[2048];

		int nLidos;

		while ((nLidos = is.read(buffer)) >= 0) {

			output.write(buffer, 0, nLidos);

		}

		output.flush();

		output.close();

	}

}

Se eu continuo tentando fazer o upload ela funciona e para de funcionar “aleatoriamente”… digo aleatoriamente pq ainda naum descobri o real motivo.

Muito obrigado pessoal…

2 Respostas

R

Se você iniciar o upload e logo em seguida mandar o navegador parar, interrompendo o envio, não vai causar o que a exception está alegando ?

Acho que pode ser isso. Acabei nem tentando o google porque estou sem tempo no momento …

[EDIT]
Não tem em algum lugar a configuração de tamanho máximo pra upload ? Caso não me engane, pode ter alguma configuração dessa no web.xml … uma outra idéia também.

sucesso!
Roger Leite

T

Muito obrigado pelas alternativas. Acho q o problema foi sanado. Pelo menos ateh agora não ocorreu o erro novamente. :smiley:
Eu resolvi arrumando a lógica do código javascript(ajax) que estava, possivelmente, fazendo requisições e interrompendo o upload em certos momentos.
Muito obrigado, Roger…

Criado 18 de janeiro de 2008
Ultima resposta 21 de jan. de 2008
Respostas 2
Participantes 2