yu9851910
2018-03-14 08:46
采纳率: 77.4%
浏览 2.2k

点击一个链接直接下载一个XML文件

有一个链接,当我点击时直接下载一个XML文件到本地,像导出EXCEL类似。
没有描述清楚问题,我现在是可以把数据库里面的数据取出,写入XML文件,但每次下载都到存放代码的服务器上面去了,我本地并不能看到XML文件,我想知道如何才能像导出EXCEL一样把XML导出或者下载到本地服务器,而不是存放代码的服务器。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

10条回答 默认 最新

  • Amo_lt 2018-03-15 02:46
    已采纳

    下载按钮:

     <a href="/XXX/downloadZipQrcode.save" target="_self" class="btn btn-success btn-download"><span class="fa fa-download"></span> 下载</a>
    

    下载接口:

      @RequestMapping("/downloadZipQrcode.save")
        public void downloadZipQrcode(HttpServletResponse response) throws IOException{
    
            List<PointQrcode> fileList = XXX;      //查询所有       
            String zipName = URLEncoder.encode("XXX.xml","UTF-8");
            String filePathBeforeDir = XXX;  //上传路径前缀
            //设置response的编码方式
            response.setContentType("APPLICATION/OCTET-STREAM");  
            //解决中文乱码
            response.setHeader("Content-Disposition","attachment; filename="+ new String(zipName.getBytes("utf-8"), "iso-8859-1"));
            ZipOutputStream out = new ZipOutputStream(response.getOutputStream());
            try {
                for(Iterator<PointQrcode> it = fileList.iterator();it.hasNext();){
                    XXX file = it.next();
                    File tempFile=new File(filePathBeforeDir + file.getDownloadUrl());
                    if(! tempFile.exists())
                    {
                        //文件不存在则直接跳过
                        continue;
                    }
                    ZipUtils.doCompress(filePathBeforeDir + file.getDownloadUrl(), out);
                    response.flushBuffer();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                out.close();
            }
        }
    

    我这是下载zip,改成你的就可以了

    点赞 打赏 评论
  • #农村外出务工人员 2018-03-14 08:59

    这个简单啊, 要么就用流下载,要么就用json下载

    点赞 打赏 评论
  • 风云中天 2018-03-14 09:04

    在web开发中,我们经常有这样的需求:点击一个链接直接弹出下载的对话框。以前我们最常用的办法就是把这样的文件加到链接上,这样可以让浏览者通过点击鼠标右键的目标另存为来下载所链接的文件。但是,存在这样的问题:如果浏览器能够识别已下载文件的扩展名,则浏览器就会激活该扩展名所关联的程序来打开所下载的文件。比如:在windows平台上,如果用户点击的链接链接的是一个“.doc”文件的话,那么,浏览器就会启动microsoft word应用程序来打开它。下面我们用servlet来实现该需求:

    //get input byte[] from somewhere,you can also get it from local file or from DataBase
    byte[]p12 = user.getP12Id();
    String length = String.valueOf(p12.length);
    OutputStream outputStream = response.getOutputStream();
    response.setContentType("application/octet-stream");
    response.setHeader("Content-disposition", "attachment;filename="+ loginId +".p12");
    response.setContentType("application/pkcs-12");
    response.setHeader("Content_Length", length);
    outputStream.write(p12);

    要直接下载一个文件,我们需要做两件事,第一件事是:设定响应的内容类为“application/octet-stream”,大小写无关, 访问页面的时候浏览器就会开启下载框对其内容进行下载。第二件事是:设置http的响应头名字为:content-disposition,设定值为:attachment; filename = thefilename。这里的thefilename就是出现在文件下载对话框里的默认文件名,通常和所下载的文件名字相同,但也可以不同。

    点赞 打赏 评论
  • 阿奈 2018-03-14 09:37

    把文件存放到该地址然后访问就可以了

    点赞 打赏 评论
  • 丹妮 2018-03-14 09:44

    直接把文件放在改地址下就可以

    点赞 打赏 评论
  • 算不算码农 2018-03-14 09:53
    1. 点击链接直接获取输出流
    2. 文件事先放在文件服务器上,点击链接直接下载
    点赞 打赏 评论
  • flowell 2018-03-14 11:44

    直接把文件地址给出就可以的了

    点赞 打赏 评论
  • csdn2csdn2 2018-03-14 13:25

    直接给出文件地址就可以了吧

    点赞 打赏 评论
  • 焙焙龙 2018-03-14 17:06

    通过给response设置ContentType和附件名理论上是可以的
    不过不排除有奇葩浏览器对这种响应的奇葩处理方式
    不过怎么处理文件,的确是浏览器自己的事情,服务端只能建议,不能决定

    点赞 打赏 评论
  • han_yang215 2018-03-16 08:22

    访问url地址下载不就好了

    点赞 打赏 评论

相关推荐 更多相似问题