Problema em upload de arquivo

2 respostas
F

Pessoal, boa tarde!

Estou implementado um exemplo que vi em um livro e estou me deparando com a seguinte exception ao fazer o upload do arquivo para C:\123data:
java.io.FileNotFoundException: C:\123data (Acesso negado)
	at java.io.RandomAccessFile.open(Native Method)
	at java.io.RandomAccessFile.<init>(Unknown Source)
	at java.io.RandomAccessFile.<init>(Unknown Source)
	at org.apache.jsp._13_4_jsp._jspService(_13_4_jsp.java:98)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
	at java.lang.Thread.run(Unknown Source)
Segue o código do meu jsp:
<%@ page import="java.io.*" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
String savePath="C:/123data/";

String filename= "";

ServletInputStream in = request.getInputStream();

byte[] line = new byte[128];
int i = in.readLine(line, 0, 128);
int boundaryLength = i - 2;
String boundary = new String(line, 0, i);

while(i != -1) {
	String newLine = new String(line, 0, i);
	if(newLine.startsWith("Content-Disposition: form-data; name=\"")); {
		String s = new String(line, 0, i-2);
		int pos = s.indexOf("filename=\"");
		if(pos != -1) {
			String filepath = s.substring(pos+10, s.length()-1);
			pos = filepath.lastIndexOf("\\");
			if(pos != -1)
				filename = filepath.substring(pos + 1);
			else
				filename = filepath;
		}
		
		i = in.readLine(line, 0, 128);
		i = in.readLine(line, 0, 128);
		
		i = in.readLine(line, 0, 128);
		
		ByteArrayOutputStream buffer = new ByteArrayOutputStream();
		newLine = new String(line, 0, i);
		
		while(i != -1 && !newLine.startsWith(boundary)) {
			buffer.write(line, 0, i);
			i = in.readLine(line, 0, 128);
			//newLine = new String(line, 0, i);
		}
		
		try {
			RandomAccessFile f = new RandomAccessFile(savePath + filename, "rw");
			byte[] bytes = buffer.toByteArray();
			f.write(bytes, 0, bytes.length-2);
			f.close();
		} catch(Exception e) {
			e.printStackTrace();
		}
		i = in.readLine(line, 0, 128);
	}
}
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

</body>
</html>
PS: Já tentei alterar a linha
String savePath="C:/123data/";
para
String savePath="C:\\123data\\";
e não parece ajudar. As permissões já foram todas liberadas, tenho dúvidas se o problema está na permissão do diretório ou no caminho que o buffer envia os dados:
try {
			RandomAccessFile f = new RandomAccessFile(savePath + filename, "rw");

2 Respostas

F

Ainda quebrando a cabeça com este problema, qualquer dica seria bem vinda.

caiozanchetti

Fernando, tudo bem?

Cara tive esse mesmo problema a alguns dias atrás, tudo por causa de permissões nos diretórios que estavam envolvidos com a operação (não era no arquivo).

Me chamou atenção um detalhe importante. Na sua stacktrace há o Jasper (org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) no que vc está usando ele? como funciona exatamente seu programa?

Abraço

Criado 1 de fevereiro de 2010
Ultima resposta 3 de fev. de 2010
Respostas 2
Participantes 2