javaweb中运用fileupload上传文件
来源:互联网 发布:黑暗网络泄露图片 编辑:程序博客网 时间:2024/06/16 06:31
本文是介绍javaweb开发运用Apache中的commons fileupload的commons io的工具来进行文件上传,在开发中会遇到很多比较棘手的问题,本人接触后进行了总结。
开发准备:
去阿帕奇官网https://commons.apache.org/下载commons fileupload的commons io的连接bin.jar包,里面有很多commons工具组件,以后开发都会用到。找到fileupload跟io,点击去选择版本下载,这里要说明一下:
只要下载红色框中一对压缩包就行,其中src是源文件。
前台开发
<%@ 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>Insert title here</title></head><body><!-- enctype默认字符类型是:application/x-www-form-urlencoded 这种无法读取文本内容,enctype="multipart/form-data这中才可以,以二进制读取文件 改为这种方式不可以用getParameter方式获取参数 --> <form action="uploadServlet" method="post" enctype="multipart/form-data"> 上传文件<input type="file" name="file"> <br><br> desc:<input type="text" name="desc"> <input type="submit" value="Submit"> </form></body></html>
后台开发
UploadServlet:这里复制index例子后,按Ctrl+shilt+o,导入commons的包,一定是要导入正确的包,因为在本地Tomcat中也有相关的包,以免导入后无法上传
package com.qiming.javaweb;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;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.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;@WebServlet("/uploadServlet")public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //以下是在commons-fileupload-1.2.1\site的例子 //注意在新的压缩包中没有这个index.html //复制commons.fileupload的例子源码 // 1.得到FileItem的items DiskFileItemFactory factory = new DiskFileItemFactory(); // Set factory constraints factory.setSizeThreshold(1024*500); //创建临时文件 File tempDirectory=new File("D:\\tempDirectory"); factory.setRepository(tempDirectory); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Set overall request size constraint upload.setSizeMax(1024*1024*5); // Parse the request try { //对于表单的类型multipart/form-data,获取表单内容 List<FileItem> items = upload.parseRequest(request); for(FileItem item:items){ if(item.isFormField()){ //获取请求的文件名getFieldName //如果是一个一般的表单域,打印信息 String name=item.getFieldName(); String value=item.getString(); System.out.println(name+":"+value); } //若是文件域则把文件保存到d:\\files目录下 else{ //获取jsp请求的file名字 String fieldName = item.getFieldName(); //获取上传文件的全路径,必须分割找到文件名 String fileName = item.getName(); String contentType = item.getContentType(); long sizeInBytes = item.getSize(); System.out.println(fieldName); System.out.println(fileName); System.out.println(contentType); System.out.println(sizeInBytes); InputStream in=item.getInputStream(); byte[] buffer=new byte[1024]; int len=0; //获取文件名 String filename1 = FileUploadUtils.getRealName(fileName); //创建文件路径 fileName="d:\\files\\"+filename1; System.out.println(fileName); //输出到电脑 OutputStream out=new FileOutputStream(fileName); while((len=in.read(buffer))!=-1){ out.write(buffer, 0, len); } out.close(); in.close(); } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } //1.获取请求信息,获取的请求信息不是二进制的,不能读取文件,必须使用io流// String file=request.getParameter("file");// String desc=request.getParameter("desc");// // System.out.println(file);// System.out.println(desc);// //io流读取内容,但是通过流获取很麻烦// InputStream in=request.getInputStream();// // Reader reader=new InputStreamReader(in);// BufferedReader bufferedReader=new BufferedReader(reader);// // String str=null;// // while((str=bufferedReader.readLine())!=null){// System.out.println(str);// } }}
这个类很重要,因为commons fileupload中的getName在不同浏览器获取的结果是不同的,有的会获取全路径,有的只会获取文件名,所以为了统一,定义这个类是对获取的要上传的文件的全路径得到要上传的文件名,然后在将文件名与制定要下载的目录拼接起来。
路径拼接运用:String中的lastIndexOf(“\”)+1方法,必须写“\”,其中一个”/”是转义字符,获取文件路径后,从最后一个“/”开始获取文件名,比如:d:\files\2NE1 - Kiss.mp3,获取之后是2NE1 - Kiss.mp3。源代:
import java.util.UUID;public class FileUploadUtils { //获取文件的名称。 public static String getRealName(String filename){ //从最后一个“\”返回,开始获取字符串,获取文件名 int index = filename.lastIndexOf("\\")+1; return filename.substring(index); }
这样就可解决文件上传,路径问题了。代码仅供参考,有什么错误,请指教。
阅读全文
0 0
- javaweb中运用fileupload上传文件
- javaweb 文件上传(fileupload) 下载
- javaweb 文件上传(fileupload) 下载
- javaweb FileUpload 图片文件上传示例
- javaWeb实战教程5-fileupload文件上传
- javaweb中的文件上传之fileupload组件
- FileUpload控件中防止上传文件重名
- Fileupload 如何在updatepanel中上传文件
- struts2中使用原生fileUpload上传文件
- 文件上传控件(FileUpload)
- 使用FileUpload上传文件
- common-fileupload上传文件
- java fileupload上传文件
- FileUpload的文件上传
- 文件上传 FileUpload
- FileUpload上传读取文件
- FileUpload(文件上传)
- 文件上传 commons-FileUpload
- 继承与菱形继承
- Java 异常
- Linux 修改mysql 表名不区分大小写
- jsp中的<%@ ...%>
- [Eclipse]
- javaweb中运用fileupload上传文件
- PAT乙级 1033. 旧键盘打字(20)--字符ASCII码的应用
- SBC介绍
- 安卓文件保存、读取工具类,可以直接用,包含路径说明
- PAT乙级 1034. 有理数四则运算(20)
- javascript 判断字符串是否包含某字符串,String对象中查找子字符,indexOf
- Tyvj1952 Easy OSU
- 20170726 jQuery练习题 表格操作练习题
- 大家好