小程序第四弹 文件上传下载

页面效果,现在不写样式了,只写Js文件了
其中有
如何列表渲染页面
如何下载文件
如何上传文件

Paste_Image.png

页面的代码地址:https://pan.baidu.com/s/1nuLdKoT
后台代码简单展示

文件上传

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
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;

@SuppressWarnings("serial")
public class Uploadfile extends HttpServlet {

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

    @SuppressWarnings("unchecked")
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        FileItem file = null;
        InputStream in = null;
        request.setCharacterEncoding("UTF-8");
        try {
            // 1、创建一个DiskFileItemFactory工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();
            // 2、创建一个文件上传解析器
            ServletFileUpload upload = new ServletFileUpload(factory);

            // 解决上传文件名的中文乱码
            upload.setHeaderEncoding("UTF-8");
            // 1. 得到 FileItem 的集合 items
            List<FileItem> items = upload.parseRequest(request);
            // 2. 遍历 items:
            for (FileItem item : items) {
                String name = item.getFieldName();
                // 若是一个一般的表单域, 打印信息
                if (item.isFormField()) {
                    System.out.println("表单域,上传文件时的其余参数,在这里获得" + name);
                } else {
                    System.out.println("文件" + item);
                    file = item;
                }
            }

            // 上传文件
            byte[] buff = new byte[1024];
            if (file == null) {
            } else {
                // 写入文件到服务器
                FileOutputStream out = new FileOutputStream("c:\\" + file.getName());
                int rc = 0;
                while ((rc = in.read(buff)) > 0) {
                    out.write(buff, 0, rc);
                }
                out.flush();
                out.close();
            }
            
            response.setCharacterEncoding("utf-8");
            response.getWriter().print("{\"code\":\"0\",\"message\":\"success\"}");
            response.getWriter().flush();
            response.getWriter().close();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

文件下载

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Download extends HttpServlet {

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

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

        String filename = request.getParameter("filename");

        // 查询能下载的文件 也就是file文件夹里面的内容
        String path = request.getSession().getServletContext().getRealPath("");

        String pathurl = path + "\\file\\" + filename;
        // System.out.println(pathurl);
        // 告诉浏览器是以下载的方法获取到资源
        // 告诉浏览器以此种编码来解析URLEncoder.encode(filename, "utf-8"))
//      response.setContentType("text/html; charset=GBK");
        // response.setHeader("content-disposition", "attachment; filename=" +
        // URLEncoder.encode(filename, "utf-8"));
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("gbk"), "iso-8859-1"));

        // 获取到所下载的资源
        FileInputStream fis = new FileInputStream(pathurl);
        int len = 0;
        byte[] buf = new byte[1024];
        while ((len = fis.read(buf)) != -1) {
            response.getOutputStream().write(buf, 0, len);
        }

        response.getOutputStream().flush();
        response.getOutputStream().close();

    }

}

我在文件下载测试时,遇到问题,下载的文件,不管是临时保存或者永久保存都是没有后缀的文件,没有后缀就意味着无法打开,没有解决这个问题

只有这样写的情况,下载的文件才能有后缀名字

Paste_Image.png

在电脑端测试时,下载的文件一般位于
C:\Users\administrator\AppData\Local\微信web开发者工具\User Data\WeappFileCache

Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,921评论 19 139
  • (源自摘抄整理)https://www.91ri.org/11494.html Webshell实现与隐藏探究 一...
    JackyTsuuuy阅读 21,124评论 2 13
  • 本文包括:1、文件上传概述2、利用 Commons-fileupload 组件实现文件上传3、核心API——Dis...
    廖少少阅读 14,313评论 5 91
  • 1、 今天是最后一天面试,二十多个面试者没有一个出彩的,就在我准备咔嚓掉最后一位面试者去吃午饭的时候,她向我走了过...
    慢慢融化阅读 3,764评论 2 4
  • 在我们的学习的过程中,学习方法不科学的现象普遍存在。其中一个重要的原因,就是轻视对学习方法的研究,认为只要努力了,...
    遇见小媛阅读 3,173评论 1 7

友情链接更多精彩内容