0

我正在将excel文件上传到数据库中。当我不使用浏览器直接提供文件路径时,代码工作正常。

但是当我通过浏览按钮上传 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:
4

1 回答 1

0

尝试提供一些其他目录路径而不是默认路径。

就像是

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

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

FileOutputStream fileOut = new FileOutputStream(strUploadDir + saveFile);

我不知道它在哪里写入文件默认位置,但这应该可以。

PS 您应该使用 Servlet 来执行此操作,将 JSP 用于表示(视图)逻辑以外的其他操作不是一个好习惯。

于 2013-04-06T08:00:05.863 回答