首页 > 开发 > Java > 正文

Java实现上传文件图片到指定服务器目录

2024-07-14 08:41:15
字体:
来源:转载
供稿:网友

具体代码如下所示:

***web.xml***<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <servlet> <servlet-name>fileUpload</servlet-name> <servlet-class>cn.com.action.FileUpload</servlet-class> </servlet> <servlet-mapping> <servlet-name>fileUpload</servlet-name> <url-pattern>/fileUpload</url-pattern> </servlet-mapping></web-app>
package cn.com.action;import java.io.File;import java.io.*;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.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;/** *  * @author Administrator * 文件上传 * 具体步骤: * 1)获得磁盘文件条目工厂 DiskFileItemFactory 要导包 * 2) 利用 request 获取 真实路径 ,供临时文件存储,和 最终文件存储 ,这两个存储位置可不同,也可相同 * 3)对 DiskFileItemFactory 对象设置一些 属性 * 4)高水平的API文件上传处理 ServletFileUpload upload = new ServletFileUpload(factory); * 目的是调用 parseRequest(request)方法 获得 FileItem 集合list , *  * 5)在 FileItem 对象中 获取信息, 遍历, 判断 表单提交过来的信息 是否是 普通文本信息 另做处理 * 6) * 第一种. 用第三方 提供的 item.write( new File(path,filename) ); 直接写到磁盘上 * 第二种. 手动处理  * */public class FileUpload extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException { request.setCharacterEncoding("utf-8"); //设置编码 //获得磁盘文件条目工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //获取文件需要上传到的路径 String path = request.getRealPath("/upload1");// String path = "c:/upload1"; //如果没以下两行设置的话,上传大的 文件 会占用 很多内存, //设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同 /**  * 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上,   * 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem 格式的   * 然后再将其真正写到 对应目录的硬盘上  */ factory.setRepository(new File(path)); //设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室 factory.setSizeThreshold(1024*1024) ; //高水平的API文件上传处理 ServletFileUpload upload = new ServletFileUpload(factory); try {  //可以上传多个文件  List<FileItem> list = (List<FileItem>)upload.parseRequest(request);  for(FileItem item : list){  //获取表单的属性名字  String name = item.getFieldName();  //如果获取的 表单信息是普通的 文本 信息  if(item.isFormField()){   //获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的   String value = item.getString() ;   request.setAttribute(name, value);  }else{//对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些   /**   * 以下三步,主要获取 上传文件的名字   */   //获取路径名   String value = item.getName() ;   //索引到最后一个反斜杠   int start = value.lastIndexOf("//");   //截取 上传文件的 字符串名字,加1是 去掉反斜杠,   String filename = value.substring(start+1);   request.setAttribute(name, filename);   //真正写到磁盘上   //它抛出的异常 用exception 捕捉   //item.write( new File(path,filename) );//第三方提供的   //手动写的   OutputStream out = new FileOutputStream(new File(path,filename));   InputStream in = item.getInputStream() ;   int length = 0 ;   byte [] buf = new byte[1024] ;   System.out.println("获取上传文件的总共的容量:"+item.getSize());   // in.read(buf) 每次读到的数据存放在 buf 数组中   while( (length = in.read(buf) ) != -1){   //在 buf 数组中 取出数据 写到 (输出流)磁盘上   out.write(buf, 0, length);   }   in.close();   out.close();  }  } }catch (FileUploadException e) {  e.printStackTrace(); }catch (Exception e) {  e.printStackTrace(); } request.getRequestDispatcher("filedemo.jsp").forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException { doGet(request, response); }}
***index.jsp***<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>上传入口</title></head><body> <form action="fileUpload" enctype="multipart/form-data" method="post" >      用户名称:<input type="text" name="usename"> <br/>      上传图片:<input type="file" name="file1"><br/>      上传文件:<input type="file" name="file2"><br/>     <input type="submit" value="提交"/>   </form> </body></html>
***filedemo.jsp***<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>上传文件图片案列</title></head><body> 用户名称:${requestScope.usename }<br />  图片名称:${requestScope.file1 }<br />  文件名称:${requestScope.file2 }<br /> <!-- 把上传的图片显示出来 --> <img alt="go" src="upload1/<%=(String) request.getAttribute("file1")%> " /></body></html>

总结

以上所述是小编给大家介绍的Java实现上传文件图片到指定服务器目录,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对VeVb武林网网站的支持!


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表