2013-04-06 96 views
0

我将excel文件上传到数据库。当我直接给文件路径而不使用浏览代码时,工作正常。使用浏览按钮将excel文件上传到oracle数据库

但是当我上载的Excel通过浏览按钮文件,它显示

filenotfoundexception:(access is denied) 


<%@page import="org.apache.poi.ss.usermodel.Cell"%> 
<%@page import="org.apache.poi.ss.usermodel.Row"%> 
<%@page language="java" import="java.sql.*" contentType="text/html" pageEncoding="UTF-8" %> 
<%@ page import ="java.util.Date" %> 
<%@ page import ="java.io.*" %> 
<%@ page import ="java.io.FileNotFoundException" %> 
<%@ page import ="java.io.IOException" %> 
<%@ page import ="java.util.Iterator" %> 
<%@ page import ="java.util.ArrayList" %> 
<%@ page import ="org.apache.poi.hssf.usermodel.HSSFCell" %> 
<%@ page import ="org.apache.poi.hssf.usermodel.HSSFRow" %><%@ page import ="org.apache.poi.hssf.usermodel.HSSFSheet" %> 
<%@ page import ="org.apache.poi.hssf.usermodel.HSSFWorkbook" %> 
<%@ page import ="org.apache.poi.poifs.filesystem.POIFSFileSystem" %> 


<html> 
<head> 

<title>Excel File Uploading</title> 
</head> 
<body> 

<jsp:useBean id="connection" class="pk1.DB_Connection" scope="application"> 
    <jsp:setProperty name="connection" property="*"/> 
</jsp:useBean> 
<%!  
Connection con; 
PreparedStatement ps=null; 
public static ArrayList readExcelFile(String fileName) 
{ 
    /** --Define a ArrayList 
     --Holds ArrayList Of Cells 
    */ 
    ArrayList cellArrayLisstHolder = new ArrayList(); 

    try{ 
    /** Creating Input Stream**/ 
     FileInputStream myInput = new FileInputStream(fileName); 

    /** Create a POIFSFileSystem object**/ 
     POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput); 

    /** Create a workbook using the File System**/ 
     HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem); 

    /** Get the first sheet from workbook**/ 
     HSSFSheet mySheet = myWorkBook.getSheetAt(0); 

    /** We now need something to iterate through the cells.**/ 
     Iterator rowIter = mySheet.rowIterator(); 
      while(rowIter.hasNext()) 
      { 
       HSSFRow myRow = (HSSFRow) rowIter.next(); 

       Iterator cellIter = myRow.cellIterator(); 
       ArrayList cellStoreArrayList=new ArrayList(); 
       while(cellIter.hasNext()) 
       { 
        HSSFCell myCell = (HSSFCell) cellIter.next(); 
        cellStoreArrayList.add(myCell); 
       } 
        cellArrayLisstHolder.add(cellStoreArrayList); 

      } 


    } 
    catch (Exception e){e.printStackTrace(); } 
    return cellArrayLisstHolder; 
} 
%> 

<% 

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("\"")); 

out.println(saveFile); 

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; 

FileOutputStream fileOut = new FileOutputStream(saveFile); 

fileOut.write(dataBytes, startPos, (endPos - startPos)); 

fileOut.flush(); 

fileOut.close(); 


out.println(saveFile); 

.......................... ... ......................................等等

**Error:** 
type Exception report 

message 

description The server encountered an internal error() that prevented it from fulfilling this request. 

exception 

org.apache.jasper.JasperException: An exception occurred processing JSP page /excel.jsp at line 129 

126: 
127: int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length; 
128: 
129: FileOutputStream fileOut = new FileOutputStream(saveFile); 
130: 
131: fileOut.write(dataBytes, startPos, (endPos - startPos)); 
132: 


Stacktrace: 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:553) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:447) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 


root cause 

java.io.FileNotFoundException: super.xls (Access is denied) 
    java.io.FileOutputStream.open(Native Method) 
    java.io.FileOutputStream.<init>(FileOutputStream.java:179) 
    java.io.FileOutputStream.<init>(FileOutputStream.java:70) 
    org.apache.jsp.excel_jsp._jspService(excel_jsp.java:208) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java: 

回答

0

尝试给出一些其他目录路径,而不是默认路径。

喜欢的东西

String strUploadDir = "D:\\uploads\\"; \\valid directory on your server

\\ other stuff you are already doing.....

FileOutputStream fileOut = new FileOutputStream(strUploadDir + saveFile);

我完全不知道它写入文件的默认位置,但这个应该工作。

P.S.您应该使用Servlet来执行此操作,但对于Presentation(View)逻辑以外的其他应用程序,这不是一种好的做法。

相关问题