javaweb——图片上传案例

分享一个web图片上传的服务端,兼同android客户端,客户端之后会写出来,我们先来看下服务端的代码。

没有写其他功能,只有一个小操作,代码如下:

package com.kevin.imageuploadserver;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;

/**
 * 接收图片的servlet 图片上传
 * 
 * @author henry
 *
 */
@SuppressWarnings("serial")
public class UploadImageServlet extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 接收图片
        uploadImage(request, response);
        // 接收图片与用户Id
        // changeUserImage(request, response);
    }

    // 上传图片文件
    @SuppressWarnings("unused")
    private void uploadImage(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String message = "";
        try {
            DiskFileItemFactory dff = new DiskFileItemFactory();
            ServletFileUpload sfu = new ServletFileUpload(dff);
            List<FileItem> items = sfu.parseRequest(request);
            // 获取上传字段
            FileItem fileItem = items.get(0);
            // 更改文件名为唯一的
            String filename = fileItem.getName();
            if (filename != null) {
                filename = IdGenertor.generateGUID() + "." + FilenameUtils.getExtension(filename);
            }
            // 生成存储路径
            String storeDirectory = getServletContext().getRealPath("/files/images");
            File file = new File(storeDirectory);
            if (!file.exists()) {
                file.mkdir();
            }
            String path = genericPath(filename, storeDirectory);
            // 处理文件的上传
            try {
                fileItem.write(new File(storeDirectory + path, filename));

                String filePath = "/files/images" + path + "/" + filename;
                message = filePath;
            } catch (Exception e) {
                message = "上传图片失败";
            }
        } catch (Exception e) {
            message = "上传图片失败";
        } finally {
            response.getWriter().write(message);
        }
    }

    // 修改用户的图片
    private void changeUserImage(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String message = "";
        try {
            DiskFileItemFactory dff = new DiskFileItemFactory();
            ServletFileUpload sfu = new ServletFileUpload(dff);
            List<FileItem> items = sfu.parseRequest(request);
            for (FileItem item : items) {
                if (item.isFormField()) {
                    // 普通表单
                    String fieldName = item.getFieldName();
                    String fieldValue = item.getString();
                    System.out.println("name=" + fieldName + ", value=" + fieldValue);
                } else {// 获取上传字段
                    // 更改文件名为唯一的
                    String filename = item.getName();
                    // if (filename != null) {
                    // filename = IdGenertor.generateGUID() + "." +
                    // FilenameUtils.getExtension(filename);
                    // }
                    // 生成存储路径
                    String storeDirectory = getServletContext().getRealPath("/files/images");
                    File file = new File(storeDirectory);
                    if (!file.exists()) {
                        file.mkdir();
                    }
                    String path = genericPath(filename, storeDirectory);
                    // 处理文件的上传
                    try {
                        item.write(new File(storeDirectory + path, filename));

                        String filePath = "/files/images" + path + "/" + filename;
                        System.out.println("filePath=" + filePath);
                        message = filePath;
                    } catch (Exception e) {
                        message = "上传图片失败";
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            message = "上传图片失败";
        } finally {
            response.getWriter().write(message);
        }
    }

    // 计算文件的存放目录
    private String genericPath(String filename, String storeDirectory) {
        int hashCode = filename.hashCode();
        int dir1 = hashCode & 0xf;
        int dir2 = (hashCode & 0xf0) >> 4;

        String dir = "/" + dir1 + "/" + dir2;

        File file = new File(storeDirectory, dir);
        if (!file.exists()) {
            file.mkdirs();
        }
        return dir;
    }

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

上面写了注释,一个servlet,一个jsp,以下是jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>选择图片上传</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>

<body>
    <center>
        上传配件图片: <br />
        <form action="${pageContext.request.contextPath}/uploadimage"
            method="post" enctype="multipart/form-data">
            <input type="file" name="image" value="" /> <br /> <br /> <input
                type="submit" value="submit" />
        </form>

    </center>
    <hr>
</body>
</html>

很简单,输入框,提交按钮。然后在web.xml中配置下servlet就可以了。如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>

  <servlet>
    <servlet-name>UploadImageServlet</servlet-name>
    <servlet-class>com.kevin.imageuploadserver.UploadImageServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>UploadImageServlet</servlet-name>
    <url-pattern>/uploadimage</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

最后我把项目下载地址贴出来:

项目下载地址

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值