java中图片上传和服务器虚拟目录配置

FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下面的文件上传功能,与常见的SmartUpload齐名。

upload.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>




Insert title here


    

        action="FileUpLoad" enctype="multipart/form-data">
        
            
                
                    
            
            
                
            
        
                    class="text1" size="40" maxlength="40">                     class="text1" size="40" maxlength="40">

    



FileUpLoad.java

package edu.cslg.huachen.servlet;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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;

/**
 * Servlet implementation class FileUpLoad
 */
@WebServlet("/FileUpLoad")
public class FileUpLoad extends HttpServlet {
    private File uploadPath;

    private File tempPath;

    @Override
    public void init() throws ServletException {
        // 在系统启动的时候,就开始初始化,在初始化时,检查上传图片的文件夹和存放临时文件的文件夹是否存在,如果不存在,就创建

        // 获取根目录对应的真实物理路径
        uploadPath = new File(getServletContext().getRealPath("upload"));
        System.out.println(getServletContext().getRealPath("/s/a"));
        
        System.out.println("uploadPath=====" + uploadPath);
        // 如果目录不存在
        if (!uploadPath.exists()) {
            // 创建目录
            uploadPath.mkdir();
        }

        // 临时目录
        // File tempFile = new File(item.getName())构造临时对象
        tempPath = new File(getServletContext().getRealPath("temp"));
        if (!tempPath.exists()) {
            tempPath.mkdir();
        }

        // 如果不显示调用父类方法,就不会有itemManager实例,因此会造成空指针
        super.init();

    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 从item_upload.jsp中拿取数据,因为上传页的编码格式跟一般的不同,使用的是enctype="multipart/form-data"
        // form提交采用multipart/form-data,无法采用req.getParameter()取得数据
        // String itemNo = req.getParameter("itemNo");
        // System.out.println("itemNo======" + itemNo);

        /******************************** 使用 FileUpload 组件解析表单 ********************/

        // DiskFileItemFactory:创建 FileItem 对象的工厂,在这个工厂类中可以配置内存缓冲区大小和存放临时文件的目录。
        DiskFileItemFactory factory = new DiskFileItemFactory();
        // maximum size that will be stored in memory
        factory.setSizeThreshold(4096);
        // the location for saving data that is larger than getSizeThreshold()
        factory.setRepository(tempPath);

        // ServletFileUpload:负责处理上传的文件数据,并将每部分的数据封装成一到 FileItem 对象中。
        // 在接收上传文件数据时,会将内容保存到内存缓存区中,如果文件内容超过了 DiskFileItemFactory 指定的缓冲区的大小,
        // 那么文件将被保存到磁盘上,存储为 DiskFileItemFactory 指定目录中的临时文件。
        // 等文件数据都接收完毕后,ServletUpload再从文件中将数据写入到上传文件目录下的文件中

        ServletFileUpload upload = new ServletFileUpload(factory);
        // maximum size before a FileUploadException will be thrown
        upload.setSizeMax(1000000 * 20);

        /******************************* 解析表单传递过来的数据,返回List集合数据-类型:FileItem ***********/

        try {

            List fileItems = upload.parseRequest(request);

            String itemNo = "";
            // Iterator iter = fileItems.iterator()取其迭代器
            // iter.hasNext()检查序列中是否还有元素
            for (Iterator iter = fileItems.iterator(); iter.hasNext();) {
                // 获得序列中的下一个元素
                FileItem item = (FileItem) iter.next();

                // 判断是文件还是文本信息
                // 是普通的表单输入域
                if (item.isFormField()) {
                    if ("itemNo".equals(item.getFieldName())) {
                        itemNo = item.getString();
                        System.out.println("c");
                    }
                }
                // 是否为input="type"输入域
                if (!item.isFormField()) {
                    // 上传文件的名称和完整路径
                    String fileName = item.getName();
                    System.out.println(fileName);

                    long size = item.getSize();
                    // 判断是否选择了文件
                    if ((fileName == null || fileName.equals("")) && size == 0) {
                        continue;
                    }
                    // 截取字符串 如:C:\WINDOWS\Debug\PASSWD.LOG
                    fileName = fileName.substring(
                            fileName.lastIndexOf("\\") + 1, fileName.length());
                    System.out.println(fileName);

                    // 保存文件在服务器的物理磁盘中:第一个参数是:完整路径(不包括文件名)第二个参数是:文件名称
                    // item.write(file);
                    // 修改文件名和物料名一致,且强行修改了文件扩展名为gif
                    // item.write(new File(uploadPath, itemNo + ".gif"));
                    // 将文件保存到目录下,不修改文件名
                    item.write(new File(uploadPath, fileName));

                    // 将图片文件名写入打数据库
                    // itemManager.uploadItemImage(itemNo, fileName);

                }
            }
            //response.sendRedirect(request.getContextPath()
            //        + "/servlet/item/SearchItemServlet");
        } catch (Exception e) {
            e.printStackTrace();
            // throw new ApplicationException("上传失败!");
        }

    }

}

虚拟目录

用ecplise写好项目,export 导出成.war文件,然后 把该文件放入Tomcat(我的tomcat放在E:\service\Tomcat 7.0)的webapp目录中,运行tomcat会自动解压该文件,此时就可以运行该项目了。

配置虚拟目录:把解压得到的项目文件(我的是huaChen2)放入到其他的地方,比如E:\service\myproject,打开E:\service\Tomcat 7.0\conf中的server.xml文件,加入红色的部分。就ok了

            unpackWARs="true" autoDeploy="true">

       
       

       
                       prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
               
       

     

你可能感兴趣的:(java中图片上传和服务器虚拟目录配置)