用javaWeb写1创建Web项目ch45ex_uploadLimited将案例素材中的网页文件indexjsp和fileUploadjsp件复制到目录srcmainwebapp将2个jar包commons-fileupload-14jar和commons-io-25jar复制粘贴到目录srcmainwebappWEB-INFlib。2在文件选择页indexjsp中含有一个文本框和文件域文本框的默

并且保持图片的比例不变。

(1)创建Web项目ch4.5ex_uploadLimited,将案例素材中的网页文件index.jsp和fileUpload.jsp件复制到目录src/main/webapp,将2个jar包commons-fileupload-1.4.jar和commons-io-2.5.jar复制粘贴到目录src/main/webapp/WEB-INF/lib。

(2)在文件选择页index.jsp中,含有一个文本框和文件域,文本框的默认值为zhangsan或自己姓名的全拼

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
    <h2>文件上传</h2>
    <form method="post" action="fileUpload.jsp" enctype="multipart/form-data">
        <div>
            <label for="name">姓名:</label>
            <input type="text" id="name" name="name" value="zhangsan">
        </div>
        <div>
            <label for="file">选择文件:</label>
            <input type="file" id="file" name="file">
        </div>
        <div>
            <input type="submit" value="上传">
        </div>
    </form>
</body>
</html>

(3)fileUpload.jsp页已有的代码是案例ch4.5_fileUpload中的代码,请修改和补充代码,实现根据文本框输入的内容,创建文件存放目录,如uploadFolder\zhangsan。

<%@ page language="java" import="java.io.*, java.util.*, org.apache.commons.fileupload.*, org.apache.commons.fileupload.disk.*" pageEncoding="UTF-8"%>
<%
    String name = request.getParameter("name");
    String uploadFolder = "uploadFolder";
    if (name != null && !name.trim().equals("")) {
        uploadFolder += "\\" + name;
    }
    String filePath = "";
    String fileName = "";
    String message = "";
    boolean success = false;
    DiskFileItemFactory factory = new DiskFileItemFactory();
    factory.setSizeThreshold(4 * 1024);
    factory.setRepository(new File(uploadFolder));
    ServletFileUpload upload = new ServletFileUpload(factory);
    upload.setSizeMax(2 * 1024 * 1024); // 文件大小限制
    try {
        List<FileItem> items = upload.parseRequest(request);
        for (FileItem item : items) {
            if (!item.isFormField()) {
                fileName = item.getName();
                long fileSize = item.getSize();
                if (fileName != null && !fileName.trim().equals("") && fileSize > 0) {
                    int index = fileName.lastIndexOf("\\");
                    if (index != -1) {
                        fileName = fileName.substring(index + 1);
                    }
                    filePath = uploadFolder + "\\" + fileName;
                    File uploadedFile = new File(filePath);
                    item.write(uploadedFile);
                    message = "文件上传成功!";
                    success = true;
                } else {
                    message = "请选择上传的文件!";
                }
            }
        }
    } catch (Exception ex) {
        ex.printStackTrace();
        message = "文件上传失败:" + ex.getMessage();
    }
%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>文件上传结果</title>
</head>
<body>
    <h2>文件上传结果</h2>
    <% if (success) { %>
    <div>
        <p><strong>文件名:</strong><%= fileName %></p>
        <p><strong>文件大小:</strong><%= fileSize/1024 %> KB</p>
        <p><strong>文件类型:</strong><%= item.getContentType() %></p>
        <p><strong>文件路径:</strong><%= filePath %></p>
        <p><strong>上传结果:</strong><%= message %></p>
    </div>
    <% } else { %>
    <div>
        <p><strong>上传结果:</strong><%= message %></p>
    </div>
    <% } %>
</body>
</html>

(4)实现上传文件到该存放目录,并显示相关信息,如图4-12所示。

(5)如果上传的文件大小超过2MB,则不保存,并显示提示信息

<%@ page language="java" import="java.io.*, java.util.*, org.apache.commons.fileupload.*, org.apache.commons.fileupload.disk.*" pageEncoding="UTF-8"%>
<%
    String name = request.getParameter("name");
    String uploadFolder = "uploadFolder";
    if (name != null && !name.trim().equals("")) {
        uploadFolder += "\\" + name;
    }
    String filePath = "";
    String fileName = "";
    String message = "";
    boolean success = false;
    DiskFileItemFactory factory = new DiskFileItemFactory();
    factory.setSizeThreshold(4 * 1024);
    factory.setRepository(new File(uploadFolder));
    ServletFileUpload upload = new ServletFileUpload(factory);
    upload.setSizeMax(2 * 1024 * 1024); // 文件大小限制
    try {
        List<FileItem> items = upload.parseRequest(request);
        for (FileItem item : items) {
            if (!item.isFormField()) {
                fileName = item.getName();
                long fileSize = item.getSize();
                if (fileName != null && !fileName.trim().equals("") && fileSize > 0) {
                    if (fileSize > upload.getSizeMax()) { // 文件大小超过限制
                        message = "上传的文件大小超过2MB,请重新选择文件!";
                    } else {
                        int index = fileName.lastIndexOf("\\");
                        if (index != -1) {
                            fileName = fileName.substring(index + 1);
                        }
                        filePath = uploadFolder + "\\" + fileName;
                        File uploadedFile = new File(filePath);
                        item.write(uploadedFile);
                        message = "文件上传成功!";
                        success = true;
                    }
                } else {
                    message = "请选择上传的文件!";
                }
            }
        }
    } catch (Exception ex) {
        ex.printStackTrace();
        message = "文件上传失败:" + ex.getMessage();
    }
%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>文件上传结果</title>
</head>
<body>
    <h2>文件上传结果</h2>
    <% if (success) { %>
    <div>
        <p><strong>文件名:</strong><%= fileName %></p>
        <p><strong>文件大小:</strong><%= fileSize/1024 %> KB</p>
        <p><strong>文件类型:</strong><%= item.getContentType() %></p>
        <p><strong>文件路径:</strong><%= filePath %></p>
        <p><strong>上传结果:</strong><%= message %></p>
    </div>
    <% } else { %>
    <div>
        <p><strong>上传结果:</strong><%= message %></p>
    </div>
    <% } %>
</body>
</html>

(6)有兴趣的同学还可考虑实现:获取上传文件的扩展名(index = fileName.lastIndexOf("."); String nameExt = fileName.substring(index + 1).toLowerCase();),如果上传的是jsp文件,则给出不许上传的提示;如果上传的是图片文件,即扩展名在列表jpg,jpeg,png,gif,bmp中(提示,可逐个判断,也可用查找方法strA.indexOf(strB)),在页面上显示该图片,设置图片的样式,使得图片的最大宽度和最大高度都为300px,并且保持图片的比例不变。

<%@ page language="java" import="java.io.*, java.util.*, org.apache.commons.fileupload.*, org.apache.commons.fileupload.disk.*" pageEncoding="UTF-8"%>
<%
    String name = request.getParameter("name");
    String uploadFolder = "uploadFolder";
    if (name != null && !name.trim().equals("")) {
        uploadFolder += "\\" + name;
    }
    String filePath = "";
    String fileName = "";
    String message = "";
    boolean success = false;
    DiskFileItemFactory factory = new DiskFileItemFactory();
    factory.setSizeThreshold(4 * 1024);
    factory.setRepository(new File(uploadFolder));
    ServletFileUpload upload = new ServletFileUpload(factory);
    upload.setSizeMax(2 * 1024 * 1024); // 文件大小限制
    try {
        List<FileItem> items = upload.parseRequest(request);
        for (FileItem item : items) {
            if (!item.isFormField()) {
                fileName = item.getName();
                long fileSize = item.getSize();
                if (fileName != null && !fileName.trim().equals("") && fileSize > 0) {
                    if (fileSize > upload.getSizeMax()) { // 文件大小超过限制
                        message = "上传的文件大小超过2MB,请重新选择文件!";
                    } else {
                        int index = fileName.lastIndexOf("\\");
                        if (index != -1) {
                            fileName = fileName.substring(index + 1);
                        }
                        filePath = uploadFolder + "\\" + fileName;
                        File uploadedFile = new File(filePath);
                        item.write(uploadedFile);
                        message = "文件上传成功!";
                        success = true;
                        // 获取上传文件的扩展名
                        index = fileName.lastIndexOf(".");
                        String nameExt = fileName.substring(index + 1).toLowerCase();
                        if (nameExt.equals("jsp")) { // 不允许上传jsp文件
                            uploadedFile.delete();
                            message = "不允许上传jsp文件!";
                            success = false;
                        } else if (nameExt.equals("jpg") || nameExt.equals("jpeg") || nameExt.equals("png") || nameExt.equals("gif") || nameExt.equals("bmp")) { // 显示图片
                            out.print("<div><img src=\"" + request.getContextPath() + "/" + filePath.replace("\\", "/") + "\" style=\"max-width:300px;max-height:300px;\"></div>");
                        }
                    }
                } else {
                    message = "请选择上传的文件!";
                }
            }
        }
    } catch (Exception ex) {
        ex.printStackTrace();
        message = "文件上传失败:" + ex.getMessage();
    }
%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>文件上传结果</title>
</head>
<body>
    <h2>文件上传结果</h2>
    <% if (success) { %>
    <div>
        <p><strong>文件名:</strong><%= fileName %></p>
        <p><strong>文件大小:</strong><%= fileSize/1024 %> KB</p>
        <p><strong>文件类型:</strong><%= item.getContentType() %></p>
        <p><strong>文件路径:</strong><%= filePath %></p>
        <p><strong>上传结果:</strong><%= message %></p>
    </div>
    <% } else { %>
    <div>
        <p><strong>上传结果:</strong><%= message %></p>
    </div>
    <% } %>
</body>
</html>

标签: 科技


原文地址: https://cveoy.top/t/topic/6yt 著作权归作者所有。请勿转载和采集!