文件上传file upload

使用fileupload组件实现文件上传:

导入

commons-fileupload-1.2.2.jar

commons-io-2.1.jar

官方文档:

// Check that we have a file upload request 检测是否有文件上传的请求boolean isMultipart = ServletFileUpload.isMultipartContent(request);/**************************************************************/
// Create a factory for disk-based file items 创建一个基于磁盘文件项目的工厂DiskFileItemFactory factory = new DiskFileItemFactory();

// Configure a repository 配置存储库(to ensure a secure temp location is used 确保一个安全的临时位置被利用)ServletContext servletContext = this.getServletConfig().getServletContext();File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");factory.setRepository(repository);

// Create a new file upload handlerServletFileUpload upload = new ServletFileUpload(factory);

// Parse the requestList<FileItem> items = upload.parseRequest(request);

/******************************************************************************/
// Create a factory for disk-based file itemsDiskFileItemFactory factory = new DiskFileItemFactory();

// Set factory constraints 设置工厂约束factory.setSizeThreshold(yourMaxMemorySize);  //factory.setRepository(yourTempDirectory);   //

// Create a new file upload handlerServletFileUpload upload = new ServletFileUpload(factory);

// Set overall request size constraint 设置整体请求大小的约束upload.setSizeMax(yourMaxRequestSize);

// Parse the requestList<FileItem> items = upload.parseRequest(request);
/***********************************************************************/
// Process the uploaded itemsIterator<FileItem> iter = items.iterator();while (iter.hasNext()) {    FileItem item = iter.next();

    if (item.isFormField()) {        processFormField(item);    } else {        processUploadedFile(item);    }}
/*****************************************************************************/
// Process the uploaded itemsIterator<FileItem> iter = items.iterator();while (iter.hasNext()) {    FileItem item = iter.next();

    if (item.isFormField()) {        processFormField(item);    } else {        processUploadedFile(item);    }}
/*********************************************************/

 1 package com.servlet;
 2
 3 import java.io.File;
 4 import java.io.FileOutputStream;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 import java.io.OutputStream;
 8 import java.util.List;
 9
10 import javax.servlet.ServletException;
11 import javax.servlet.http.HttpServlet;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14
15 import org.apache.commons.fileupload.FileItem;
16 import org.apache.commons.fileupload.FileUploadException;
17 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
18 import org.apache.commons.fileupload.servlet.ServletFileUpload;
19
20 public class FileUploadServlet extends HttpServlet {
21     private static final long serialVersionUID = 1L;
22
23     public FileUploadServlet() {
24         super();
25     }
26
27     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
28         // TODO Auto-generated method stub
29     }
30
31     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
32
33
34         boolean isMultipart = ServletFileUpload.isMultipartContent(request);
35         System.out.println("是否有文件上传:"+isMultipart);
36
37         DiskFileItemFactory factory = new DiskFileItemFactory();
38
39         factory.setSizeThreshold(1024*512);  // 设置内存缓冲区的阀值512k
40         //设置临时存储文件的目录
41         File tempDir = new File("E:\\upload");
42         factory.setRepository(tempDir);
43
44         ServletFileUpload upload = new ServletFileUpload(factory);
45         upload.setSizeMax(1024*1024*5);  //设置上传文件的最大值 5M
46         try {
47             //解析上传文件流,获取FileItem的对象列表
48             List<FileItem> items = upload.parseRequest(request);
49
50             for(FileItem item :items){
51                 if(item.isFormField()){
52                     String name = item.getName();
53                     String value = item.getString();
54                     System.out.println(name+":"+value);
55                 }else{//如果是文件域则将文件保存到d:\\file
56                     String fieldName = item.getFieldName();
57                     String fileName = item.getName();
58                     String contentType = item.getContentType();
59                     long sizeInBytes = item.getSize();
60
61                     System.out.println("fieldName:"+fieldName);
62                     System.out.println("fileName:"+fileName);
63                     System.out.println("contentType:"+contentType);
64                     System.out.println("sizeInBytes:"+sizeInBytes);
65
66
67                     InputStream is = item.getInputStream();
68                     byte [] buffer = new byte[1024];
69                     int len = 0;
70                     fileName = "E:\\file\\"+fileName;
71                     OutputStream out = new FileOutputStream(fileName);
72                     while ((len = is.read(buffer))!=-1){
73                         out.write(buffer,0,len);
74                     }
75                     out.close();is.close();
76
77                 }
78             }
79         } catch (FileUploadException e) {
80             e.printStackTrace();
81         }
82
83     }
84
85 }

1 <form action="FileUploadServlet" method="post" enctype="multipart/form-data">
2         file:<input type="file" name="file"/>
3         <input type="submit" value="Submit"/>
4</form>


 
时间: 2024-11-08 19:49:08

文件上传file upload的相关文章

Android 实现文件上传功能(upload)

文件上传在B/S应用中是一种十分常见的功能,那么在Android平台下是否可以实现像B/S那样的文件上传功能呢?答案是肯定的.下面是一个模拟网站程序上传文件的例子.这里只写出了Android部分的代码,服务器的代码没有贴出来,有需要完整上传功能代码的朋友可以跟我联系哟- 首先新建一个Android工程,新建主启动Activity: MainActivity.java: package com.xzq.upload; import java.io.DataOutputStream; import 

Django处理文件上传File Uploads

HttpRequest.FILES 表单上传的文件对象存储在类字典对象request.FILES中,表单格式需为multipart/form-data <form enctype="multipart/form-data" method="post" action="/foo/"> <input type="file" name="image" /> request.FILES中的键

自定义input文件上传 file的提示文字及样式

简单记录一下 效果图: 代码: 1 <input class="aload" type='button' value='上传附件' onClick='javascript:$("#hiddenFile").click();' /> 2 <input id='showFileName' type='text' readonly style="border: none;"/>   3 <input id='hiddenF

1_文件上传漏洞原理

0x00 文件上传 File Upload 文件上传是大部分Web应用具有的功能,例如:头像上传,分享图片,视频,上传附件等等 正常的文件一般是图片,视频,文档等,web应用收集后放到后台存储,等到调用的时候调用返回. 如何恶意文件PHP,asp等绕过web应用后直接执行,则相当于黑客直接拿到了webshell 一旦黑客拿到webshell,则黑客可以得到web应用的数据,删除web文件,本地提权,进一步拿到整个服务器,甚至内网. SQL注入攻击的对象是数据库服务,文件上传漏洞的对象是Web服务

ajax结合文件上传类进行多文件的单个上传

今天做项目的时候碰见一个问题:之前一个同事离职之前做了一个网站,有一个上传商品详细图片的功能,当时已经完成,但是由于后期程序的有更改以及更改的程序员的水平也是参差不齐,最后导致程序bug很多,由于当时用的是一个框架,最终也没找到说明文档,后来我就重新写了一个结合ajax上传文件的upload.classs.php虽然界面欠缺美观,但是通俗易懂好维护. //首先是页面. index.php <!DOCTYPE html> <html lang="en"> <

(七)利用apache组件进行文件上传下载

一.文件上传 文件上传,即服务器端得到并处理用户上传的文件,这个文件存放在request里,也就是需要对request进行处理. 1.1 编写html文件 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action=&q

文件上传下载—servlet API实现

servlet API实现文件上传下载需要的jar包: UploadServlet.java package com.ymw.web.servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.UUID; import javax.servl

基于 lua-resty-upload 实现简单的文件上传服务

今天了解了一下 lua-resty-upload 模块,并基于 lua-resty-upload 模块简单实现了一个基本的表单文件上传服务. lua-resty-upload 在 github 上的项目地址为: https://github.com/openresty/lua-resty-upload 从实现可以看到,其实 upload 服务的实现还是比较简单的,就一个源文件 lualib/resty/upload.lua,总的代码行数也只有 300 行不到. 下面我整理了一下搭建文件上传服务的

深入分析JavaWeb Item40 -- 文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru