我正在尝试在jsp中上传图像文件,所以它的本地Windows机器提供路径c:\工作正常但在我的网络托管共享服务器,这是基于Cpanel的托管给我Access Denide消息和erorr也在下面提到它和我上传图片的目录有权限 - 托管服务器上的755
Erorr occured in uploading. java.io.FileNotFoundException: /home/pasasin/public_html/e6f618f06876640c3de368bcba6f2053c.jpg (Permission denied)
并且e.stacktrace也是
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: Exception in JSP: /upload.jsp:31
28: int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;
29: saveFile="/home/pasasin/public_html/"+saveFile;
30: File ff = new File(saveFile);
31: FileOutputStream fileOut = new FileOutputStream(ff);
32: fileOut.write(dataBytes, startPos, (endPos - startPos));
33: fileOut.flush();
34: fileOut.close();
这里我也提到了代码
page.jsp
<HTML>
<HEAD><TITLE>Display file upload form to the user</TITLE></HEAD>
<BODY> <FORM ENCTYPE="multipart/form-data" ACTION="upload.jsp" METHOD=POST>
<br><br><br>
<center>
<table border="0" bgcolor=#ccFDDEE>
<tr><center><td colspan="2" align="center"><B>UPLOAD THE FILE</B><center></td></tr>
<tr><td colspan="2" align="center"> </td></tr>
<tr><td><b>Choose the file To Upload:</b></td><td><INPUT NAME="file" TYPE="file"> </td></tr>
<tr><td colspan="2" align="center"> </td></tr>
<tr><td colspan="2" align="center"><input type="submit" value="Send File"> </td></tr>
<table>
</center>
</FORM>
</BODY>
</HTML>
upload.jsp
<%@ page import="java.io.*,java.sql.*" %>
<%
String saveFile="";
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);
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;
saveFile="/home/pasasin/public_html/"+saveFile;
File ff = new File(saveFile);
FileOutputStream fileOut = new FileOutputStream(ff);
fileOut.write(dataBytes, startPos, (endPos - startPos));
fileOut.flush();
fileOut.close();
%><Br><table border="2"><tr><td><b>You have successfully upload the file by the name of:</b>
<% out.println(saveFile);%></td></tr></table>
<%
Connection connection = null;
String connectionURL = "jdbc:mysql://localhost:3306/test";
ResultSet rs = null;
PreparedStatement psmnt = null;
FileInputStream fis;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
connection = DriverManager.getConnection(connectionURL, "root", "root");
File f = new File(saveFile);
psmnt = connection.prepareStatement("insert into file(file_data) values(?)");
fis = new FileInputStream(f);
psmnt.setBinaryStream(1, (InputStream)fis, (int)(f.length()));
int s = psmnt.executeUpdate();
if(s>0) {
System.out.println("Uploaded successfully !");
}
else{
System.out.println("unsucessfull to upload file.");
}
}
catch(Exception e){e.printStackTrace();}
}
%>
this code i have reffered from this link
please some buddy help ....i have to upload image file one or more may be in jsp but what problem is on web hosting server is mentioned
or if other way is possible so i will refer that...
Thank you...
答案 0 :(得分:2)
查看JavaDoc for FileOutputStream
。它声明如果无法创建文件,则抛出FileNotFoundException
。
您肯定有权限问题。猜测是目录的所有者是pasasin
,并且写入文件的进程是apache
/ tomcat
或其他什么。你明白了:不是你!试试chmod 777 /home/pasasin/public_html
,看看它是否有效。
755的模式意味着group
和other
只能读取目录,因此除非serlvet容器在与./public_html
的所有者相同的uid下运行,否则您将不会能够写入该目录。
干杯,
答案 1 :(得分:0)
它清楚地表明您要上传的文件,您没有权限。请检查服务提供商的访问权限。