java webapp 几种文件上传和下载方式

  • Post author:
  • Post category:java



java webapp 几种文件上传和下载方式

下载方式:

第一种:

<a href="文件地址",download="文件名"></a>

1

测试pc端chorme,safari,ie11,edge,可用,,移动端,,ios可直接开打pdf,word等文件,android上只有qq浏览器可直接查看,其他均要下载.

第二种:

springmvc实现
@RequestMapping("/download")
    public String download(@RequestParam String fileName, HttpServletRequest request,
                           HttpServletResponse response) {
        response.setCharacterEncoding("utf-8");
        response.setContentType("multipart/form-data");

        try {

            //Content-Disposition文件名中文编码问题
            String new_filename = URLEncoder.encode(fileName, "UTF8");
// 如果没有UA,则默认使用IE的方式进行编码,因为毕竟IE还是占多数的
            String rtn = "filename=\"" + new_filename + "\"";
            String userAgent = request.getHeader("user-agent");
            if (userAgent != null)
            {
                userAgent = userAgent.toLowerCase();
                // IE浏览器,只能采用URLEncoder编码
                if (userAgent.indexOf("msie") != -1)
                {
                    rtn = "filename=\"" + new_filename + "\"";
                }
                // Opera浏览器只能采用filename*
                else if (userAgent.indexOf("opera") != -1)
                {
                    rtn = "filename*=UTF-8''" + new_filename;
                }
                // Safari浏览器,只能采用ISO编码的中文输出
                else if (userAgent.indexOf("safari") != -1 )
                {
                    rtn = "filename=\"" + new String(fileName.getBytes("UTF-8"),"ISO8859-1") + "\"";
                }
                // Chrome浏览器,只能采用MimeUtility编码或ISO编码的中文输出
                else if (userAgent.indexOf("applewebkit") != -1 )
                {
                    new_filename = MimeUtility.encodeText(fileName, "UTF8", "B");
                    rtn = "filename=\"" + new_filename + "\"";
                }
                // FireFox浏览器,可以使用MimeUtility或filename*或ISO编码的中文输出
                else if (userAgent.indexOf("mozilla") != -1)
                {
                    rtn = "filename*=UTF-8''" + new_filename;
                }
            }
            response.setHeader("Content-Disposition", "attachment;"+rtn);
            String path = request.getSession().getServletContext().getRealPath("/") + "upload/inform/" ;
            System.out.println(fileName);
            InputStream inputStream = new FileInputStream(new File(path
                    + File.separator + fileName));

            OutputStream os = response.getOutputStream();
            byte[] b = new byte[2048];
            int length;
            while ((length = inputStream.read(b)) > 0) {
                os.write(b, 0, length);
            }

            // 这里主要关闭。
            os.close();

            inputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        //  返回值要注意,要不然就出现下面这句错误!
        //java+getOutputStream() has already been called for this response
        return null;
    }

html代码




但是这种方法在ios浏览器不能直接打开pdf,word等文件,需要下载,andoird上,各浏览器也不行.


3,第三种



<a href="文件路径"></a>


我觉得这种最好,需要浏览器支持


上传方式

springmvc MultipartFile方式.

java代码

    @RequestMapping(value="/fileUpload",method= RequestMethod.POST)
public  String  fileUpload(HttpServletRequest request,@RequestParam("file") MultipartFile file,@ModelAttribute Inform inform) throws IOException {
    try {
    int id = service.insertInform(inform);
    if (!file.isEmpty()) {
        // 文件保存路径
            String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/inform/"
            +file.getOriginalFilename();
            // 转存文件
            file.transferTo(new File(filePath));
    }
    } catch (Exception e) {
        e.printStackTrace();
        return "uploadErro";
    }
    // 重定向
    return "uploadSuccess";
}

*这里的文件作为附件功能上传

html代码*
<form method="post" id="form_2" action="<c:url value="/inform/fileUpload.do" />" data-ajax="false" enctype="multipart/form-data">
            <div class="ui-field-contain">
                <label for="ititle">标题:</label>
                <input type="text" name="title" id="ititle" value="" class="input">
                <textarea type="text" name="content" id="content" value="" class="input" style="display: none"></textarea>
                <input type="text" name="author" id="author" value="${name}" style="display: none;">
                <input type="text" name="publiccompany" id="publiccompany" value="${company}" style="display: none;">
                <%--提交时间--%>
                <input type="datetime" name="datetime" id="datetime" value="" style="display: none;" class="input">
                <input type="text" name="checktype" id="checktype" value="未审核" style="display: none;">

                <label for="file">文件:</label>
                <input type="file" name="file" id="file" value="">
                <div style="text-align: center;width: 100%">
                    <input type="button" value="提交" style="text-align: center" id="submit_button" onclick="toSubmit()">
                </div>

            </div>
        </form>

可与model一起上传..

这是目前最简单的方法了,还有其他方法我看都比较复杂,写下这个记录,



版权声明:本文为keygod1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。