Tomcat文件上传

时间:2014-05-28 13:44:08

标签: tomcat servlets file-upload

我正在尝试将文件上传到Tomcat服务器,我使用的是servlet和JSP。 关于用户从他的电脑中选择文件,然后按提交上传所选文件。

此外,当我按下上传按钮时,我的代码中的try部分出现错误,该响应具有已定义的异常。它捕获异常,即上传文件中的异常。

这是我的servlet代码

@WebServlet("/UploadDownloadFileServlet")
public class UploadDownloadFileServlet extends HttpServlet {

private static final long serialVersionUID = 1L;
private ServletFileUpload uploader = null;

@Override
public void init() throws ServletException{
    DiskFileItemFactory fileFactory = new DiskFileItemFactory();
    File filesDir = (File) getServletContext().getAttribute("FILES_DIR_FILE");
    fileFactory.setRepository(filesDir);
    this.uploader = new ServletFileUpload(fileFactory);
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String fileName = request.getParameter("fileName");
    if(fileName == null || fileName.equals(""))
    {
        throw new ServletException("File Name can't be null or empty");
    }
    File file = new File(request.getServletContext().getAttribute("FILES_DIR")+File.separator+fileName);
    if(!file.exists())
    {
        throw new ServletException("File doesn't exists on server.");
    }

    System.out.println("File location on server side::"+file.getAbsolutePath());
    ServletContext ctx = getServletContext();
    InputStream fis = new FileInputStream(file);
    String mimeType = ctx.getMimeType(file.getAbsolutePath());
    response.setContentType(mimeType != null? mimeType:"application/octet-stream");
    response.setContentLength((int) file.length());
    response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

    ServletOutputStream os = response.getOutputStream();
    byte[] bufferData = new byte[1024];
    int read=0;
    while((read = fis.read(bufferData))!= -1){
        os.write(bufferData, 0, read);
    }
    os.flush();
    os.close();
    fis.close();
    System.out.println("File downloaded at the client successfuly");
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    if(!ServletFileUpload.isMultipartContent(request))
    {
        throw new ServletException("Content type is not multipart/form-data");
    }

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.write("<html><head></head><body>");
    try {
        List<FileItem> fileItemsList = uploader.parseRequest(request);
        Iterator<FileItem> fileItemsIterator = fileItemsList.iterator();
        while(fileItemsIterator.hasNext()){
            FileItem fileItem = fileItemsIterator.next();
            System.out.println("FieldName="+fileItem.getFieldName());
            System.out.println("FileName="+fileItem.getName());
            System.out.println("ContentType="+fileItem.getContentType());
            System.out.println("Size in bytes="+fileItem.getSize());
            System.out.println("Size in Mbytes="+fileItem.getSize()/1048576);
            System.out.println("Every thing until now run good");

            File file = new File(request.getServletContext().getAttribute("FILES_DIR")+File.separator+fileItem.getName());
            System.out.println("Absolute Path at server="+file.getAbsolutePath());
            fileItem.write(file);
            out.write("File "+fileItem.getName()+ " uploaded successfully.");
            out.write("<br>");
            out.write("<a href=\"UploadDownloadFileServlet?fileName="+fileItem.getName()+"\">Download "+fileItem.getName()+"</a>");
        }
    } catch (FileUploadException e) {
        out.write("Exception in uploading File");
    } catch (Exception e) {
        out.write("Exception in uploading file");
    }
    out.write("</body></html>");
}

}

0 个答案:

没有答案