Fork me on GitHub
posts - 148,  comments - 5,  views - 85113

javaWeb上传与下载

    上传:

      上传方式:

          jspSmartUpload   :应用在jsp上的文件上传与下载组件。

          FileUpload            :用用在jaava环境上的上传的功能

          Servlet3.0           :提供了文件上传功能

          Struts2                   :提供文件上传的功能

    这里主要讲述FileUpload上传和下载

        上传三要素:

          1.提交的方式必须是post(因为get提交的内容大小是有限制的)

          2.表单中需要有<input type=”file”>元素,需要有name属性和值。

          3.表单enctype=”multipart/form-data”。 

        测试页面:

1
2
3
4
5
<form action="提交地址" method="post" enctype="multipart/form-data">
  <input type="text" name="info"/></br>
  <input type="file" name="filename"/>
  <input type="submit" value="上传"/>
</form>

        使用servlet来接收上传过来的文件项

          1.导包

            commons-fileupload-1.2.1.jar

            commons-io-1.4.jar

          2.编写servlet来接收

          

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.baidu.upload;
 
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;
 
public class FileUploadServlet extends HttpServlet {
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            //获取磁盘工厂
            DiskFileItemFactory dfif=new DiskFileItemFactory();
            //获取核心类
            ServletFileUpload sfu=new ServletFileUpload(dfif);
            //对核心类对象进行编码,  解决了文件名字中的乱码
            sfu.setHeaderEncoding("UTF-8");
            //获取提交参数集合(每一个表单项FileItem)
            List<FileItem> list = sfu.parseRequest(request);
            for (FileItem fileItem : list) {
                //判断是否是普通项
                if (fileItem.isFormField()) {
                    //普通项
                    String name = fileItem.getName();
                    String value = fileItem.getString("UTF-8");
                    System.out.println(name+" "+value);
                } else {
                    //文件项
                    //获取文件的名字
                    String fieldName = fileItem.getName();
                    //设置服务器存储路径
                    String dir="C:\\Users\\Administrator\\Desktop\\develop";
                    //使用文件项流进行流的对接
                    fileItem.write(new File(dir,fieldName));
                    fileItem.delete();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

      文件的下载

          下载的方式:自动下载和手动下载

            自动下载:使用超链接的方式实现文件的下载

               在<a href=”文件的路径”>超链接</a>

             注意:超链接的方式,如果浏览器不能识别这种格式的文件,提示下载,如果支持该格式的文件,直接打开。

            手动下载:设置两头一流

                Context-Type    :文件类型MIME。

                Context-Disposition :浏览器支持该格式文件下载,提示下载。

                输出流                           :设置代表该文件的输入流(输出流是固定 response.getOutputStream())

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.baidu.controller;
 
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
 
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.baidu.utils.DownloadUtils;
 
 
public class FileDownloadServlet extends HttpServlet {
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收参数
        String filePath = request.getParameter("path");<br>          //对接收来的数据进行重新编码
        String fileName = new String(request.getParameter("name").getBytes("ISO-8859-1"),"utf-8");
        String file=filePath+"\\"+fileName;
        //设置两头一流Content-type  Content-disposition  文件输出流
        String type = getServletContext().getMimeType(file);<br>          //设置响应头部的类型
        response.setContentType(type);
        response.setHeader("Content-Disposition", "attachment;filename="+file);
         
        //获取浏览器的类型
        //String header = request.getHeader("User-Agent");
        //if ("Firefox".equalsIgnoreCase(header)) {
            //file = DownloadUtils.base64EncodeFileName(file);
        //} else {
            //file = URLEncoder.encode(file,"UTF-8");
        //}<br>          //获取输入流对象  把要下载的文件作为输入流对象参数
        InputStream ips=new FileInputStream(file);<br>          //获取响应输出流对象  响应为页面
        ServletOutputStream outputStream = response.getOutputStream();
        int len=0;
        byte[] bt=new byte[1024*1024*3];
        while((len=ips.read(bt))!=-1){
            outputStream.write(bt, 0, len);
        }
        ips.close();
        outputStream.close();
    }
 
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
 
}

   使用Struts2文件上传

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private File file;  //对应前台的file的name属性
    private String fileContentType; //对应File+ContextType
    private String fileFileName;    //对应File+FileName;
    public File getFile() {
        return file;
    }
    public void setFile(File file) {
        this.file = file;
    }
    public String getFileContentType() {
        return fileContentType;
    }
    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }
    public String getFileFileName() {
        return fileFileName;
    }
    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }
    public String execute(){
        try {
            FileUtils.copyFile(file, new File("E:/server",fileFileName));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return SUCCESS;
    }

  配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<action name="upload" class="com.baidu.web.action.UploadAction" method="execute">
            <result name="success">/success.jsp</result>
            <!-- 配置上传文件监听器 -->
            <interceptor-ref name="fileUpload">
                <!-- 配置上传文件的大小 -->
                <param name="maximumSize"></param>
                <!-- 上传文件扩展名 -->
                <param name="allowedExtensions">bmp,txt,xml,doc,java</param> <!-- 设置上传文件允许的后缀名,多个使用逗号分开 -->
                <!-- 配置上传文件的类型 -->
                <param name="allowedTypesSet">application/java</param>
                 
            </interceptor-ref>
            <interceptor-ref name="defaultStack"/>
        </action>

  

 多文件上传

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
private File[] file;    //对应前台的file的name属性
    private String[] fileContentType;   //对应File+ContextType
    private String[] fileFileName;  //对应File+FileName;
     
    public File[] getFile() {
        return file;
    }
 
    public void setFile(File[] file) {
        this.file = file;
    }
 
    public String[] getFileContentType() {
        return fileContentType;
    }
 
    public void setFileContentType(String[] fileContentType) {
        this.fileContentType = fileContentType;
    }
 
    public String[] getFileFileName() {
        return fileFileName;
    }
 
    public void setFileFileName(String[] fileFileName) {
        this.fileFileName = fileFileName;
    }
 
    public String execute(){
        try {
            for (File f : file) {      
            }
            for (int i = 0; i < file.length; i++) {
                FileUtils.copyFile(file[i], new File("E:/server",fileFileName[i]));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return SUCCESS;
    }

  

 

 

 

      

posted on   TopTime  阅读(468)  评论(0编辑  收藏  举报
< 2025年4月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 1 2 3
4 5 6 7 8 9 10

点击右上角即可分享
微信分享提示