A. java response.getOutputStream()实现多个文件下载,已经拿到两个字节数组的list,下载的时候如何同时下载
可以一个接口传多个文李模件,每个文件中间用特定符号拆分,也可以写一渣扰知个接口前端多次调用,将请求头的文件格式改为blob,前端获取文件流后如消调用下载
B. Java文件下载怎么实现的
下载就很简单了把你要下载的文件做成超级链接,可以不用任何组件比如说下载一个word文档<a href="名称.doc">名称.doc</a>路径你自己写import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.ProtocolException;import java.net.URI;import java.net.URL;import java.util.Random;/** * * 实现了下载的功能*/ public class SimpleTh {public static void main(String[] args){ // TODO Auto-generated method stub //String path = "http://www.7cd.cn/QingTengPics/倩女幽魂.mp3";//MP3下载的地址 String path ="http://img.99luna.com/music/%CF%EB%C4%E3%BE%CD%D0%B4%D0%C5.mp3"; try { new SimpleTh().download(path, 3); //对象调用下载的方法 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static String getFilename(String path){//获得文件的名字 return path.substring(path.lastIndexOf('/')+1); }public void download(String path,int threadsize) throws Exception//下载的方法 {//参数 下载地址,线程数量 URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection)url.openConnection();//获取HttpURLConnection对象 conn.setRequestMethod("GET");//设置请求格式,这里是GET格式 conn.setReadTimeout(5*1000);// int filelength = conn.getContentLength();//获取要下载文件的长度 String filename = getFilename(path); File saveFile = new File(filename); RandomAccessFile accessFile = new RandomAccessFile(saveFile, "rwd"); accessFile.setLength(filelength); accessFile.close(); int block = filelength%threadsize ==0?filelength/threadsize:filelength/threadsize+1; for(int threadid = 0;threadid<=threadsize;threadid++){ new DownloadThread(url,saveFile,block,threadid).start(); } } private final class DownloadThread extends Thread{ private URL url; private File saveFile; private int block;//每条线程下载的长度 private int threadid;//线程id public DownloadThread(URL url,File saveFile,int block,int threadid){ this.url = url; this.saveFile= saveFile; this.block = block; this.threadid = threadid; } @Override public void run() { //计算开始位置的公式:线程id*每条线程下载的数据长度=? //计算结束位置的公式:(线程id+1)*每条线程下载数据长度-1=? int startposition = threadid*block; int endposition = (threadid+1)*block-1; try { try { RandomAccessFile accessFile = new RandomAccessFile(saveFile, "rwd"); accessFile.seek(startposition);//设置从什么位置写入数据 HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setReadTimeout(5*1000); conn.setRequestProperty("Range","bytes= "+startposition+"-"+endposition); InputStream inStream = conn.getInputStream(); byte[]buffer = new byte[1024]; int len = 0; while((len = inStream.read(buffer))!=-1){ accessFile.write(buffer, 0, len); } inStream.close(); accessFile.close(); System.out.println("线程id:"+threadid+"下载完成"); } catch (FileNotFoundException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } }}
C. JAVA 如何一次下载多个文件
创建多线程下载如果说方便下载,是打包再下载~~~~~~~~~~~~~~~~~~~~~~
D. 用jsP打包文件列表实现批量下载
你只设置了响应类型,但并没有返回数据的浏览器
E. 高分:用java实现服务器上多个文件先打包,然后下载,下载完成后删除包!
可以抄把这些url,name暂存到session里面下载和袭上传可以使用插件jspsmart很久没有使用了 稍微看一下API吧jspsmart就是把上传和下载的工作封装简化,所以使用非常简单的下载完成后调用file.delete();就在服务器上删掉了
F. 怎样编一个能实现文件下载功能的JAVA程序
java实现文件下载一、采用RequestDispatcher的方式进行1、web.xml文件中增加<mime-mapping> <extension>doc</extension> <mime-type>application/vnd.ms-word</mime-type></mime-mapping>2、程序如下: <%@page language="java" import="java.net.*" pageEncoding="gb2312"%><%response.setContentType("application/x-download");//设置为下载application/x-download String filenamedownload = "/系统解决方案.doc";//即将下载的文件的相对路径 String filenamedisplay = "系统解决方案.doc";//下载文件时显示的文件保存名称 filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8"); response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay); try { RequestDispatcher dispatcher = application.getRequestDispatcher(filenamedownload); if(dispatcher != null) { dispatcher.forward(request,response); } response.flushBuffer(); } catch(Exception e) { e.printStackTrace(); } finally { }%>二、采用文件流输出的方式下载1、web.xml文件中增加<mime-mapping> <extension>doc</extension> <mime-type>application/vnd.ms-word</mime-type></mime-mapping>2、程序如下: <%@page language="java" contentType="application/x-msdownload" import="java.io.*,java.net.*" pageEncoding="gb2312"%><%//关于文件下载时采用文件流输出的方式处理: //加上response.reset(),并且所有的%>后面不要换行,包括最后一个; //因为Application Server在处理编译jsp时对于%>和<%之间的内容一般是原样输出,而且默认是PrintWriter, //而你却要进行流输出:ServletOutputStream,这样做相当于试图在Servlet中使用两种输出机制, //就会发生:getOutputStream() has already been called for this response的错误 //详细请见《More Java Pitfill》一书的第二部分 Web层Item 33:试图在Servlet中使用两种输出机制 270 //而且如果有换行,对于文本文件没有什么问题,但是对于其它格式,比如AutoCAD、Word、Excel等文件 //下载下来的文件中就会多出一些换行符0x0d和0x0a,这样可能导致某些格式的文件无法打开,有些也可以正常打开。 response.reset();//可以加也可以不加 response.setContentType("application/x-download");//设置为下载application/x-download // /../../退WEB-INF/classes两级到应用的根目录下去,注意Tomcat与WebLogic下面这一句得到的路径不同,WebLogic中路径最后没有/ System.out.println(this.getClass().getClassLoader().getResource("/").getPath()); String filenamedownload = this.getClass().getClassLoader().getResource("/").getPath() + "/../../系统解决方案.doc"; String filenamedisplay = "系统解决方案.doc";//系统解决方案.txt filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8"); response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay); OutputStream output = null; FileInputStream fis = null; try { output = response.getOutputStream(); fis = new FileInputStream(filenamedownload); byte[] b = new byte[1024]; int i = 0; while((i = fis.read(b)) > 0) { output.write(b, 0, i); } output.flush(); } catch(Exception e) { System.out.println("Error!"); e.printStackTrace(); } finally { if(fis != null) {
G. java 实现文件批量上传下载实现方法 以及优势缺点
给你个不乱的。这个写的很清楚,基本上你复制源码就可以。http://blog.csdn.net/hzc543806053/article/details/7524491
H. JAVA 批量下载.zip
/** * 报表查询模块 —-文件下载流 * @return * @throws IOException */ public InputStream getInputStream() throws IOException { InputStream ins = new FileInputStream(zipReports()); return ins; } /** * 根据传过来的报表编号压缩文件为zip * @param response * @param serverPath * @param str * @throws IOException */ public File zipReports() throws IOException{ List<StatisticalReport> srclist = new ArrayList<StatisticalReport>(); String[] pks = ids.split(","); if(pks.length > 0){ for(String pk : pks){ String[] str = pk.split("\\|"); StatisticalReport obj = new StatisticalReport(); obj.setCendat(str[0]); obj.setOrgidt(str[1]); obj.setRep_code(str[2]); obj.setCurcde(str[3]); srclist.add(obj); } } StatisticalReport obj = new StatisticalReport(); obj.setReportList(srclist); //查询要下载的报表文件 List<StatisticalReport> list = statisticalReportService.findReportList(obj); //获取应用在服务器上的根目录 String path = request.getSession().getServletContext().getRealPath(System.getProperty("file.separator")); List<File> srcList = new ArrayList<File>(); if(list.size() > 0){ for(StatisticalReport statisticalReport : list){ File file = new File(statisticalReport.getFile_path()); if(file.exists()){ srcList.add(file); } } } Pim_sysUser user = (Pim_sysUser) session.getAttribute(SysConstant.SESSION_USER_DATA); File zipfile = new File(path + System.getProperty("file.separator") + user.getLogid() + "REPORT.zip"); if(zipfile.exists()){ zipfile.delete(); zipfile.createNewFile(); } //FileTools.File(, res.getString("help_path"), newFormatFileName);// 上传文件 ZipUtils.zipFiles(srcList, zipfile); return zipfile; }import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.List;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;public class ZipUtils { /** * 将多个Excel打包成zip文件 * * @param srcfile * @param zipfile */ public static void zipFiles(List<File> srcfile, File zipfile) { byte[] buf = new byte[2048]; try { // Create the ZIP file // Compress the files if(srcfile.size() > 0){ // 创建ZipOutputStream类对象 ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile)); for (int i = 0; i < srcfile.size(); i++) { File file = srcfile.get(i); FileInputStream in = new FileInputStream(file); // Add ZIP entry to output stream. out.putNextEntry(new ZipEntry(file.getName()));// 写入此目录的Entry 创建新的进入点 // Transfer bytes from the file to the ZIP file int len; while ((len = in.read(buf)) > 0) { out.setLevel(9); out.write(buf, 0, len); } // Complete the entry out.closeEntry(); in.close(); } out.close(); }else{ ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile)); out.putNextEntry(new ZipEntry(" ")); out.closeEntry(); out.close(); } // Complete the ZIP file } catch (IOException e) { e.printStackTrace(); } }}
I. 通过java实现文件下载
在jsp/servlet中断点/多线程下载文件<%@ page import="java.io.File" %><%@ page import="java.io.IOException" %><%@ page import="java.io.OutputStream" %><%@ page import="java.io.RandomAccessFile" %><%! public void downloadFile(HttpServletRequest request, HttpServletResponse response, File file) throws IOException { RandomAccessFile raf = new RandomAccessFile(file, "r"); java.io.FileInputStream fis = new java.io.FileInputStream(raf.getFD()); response.setHeader("Server", "www.trydone.com"); response.setHeader("Accept-Ranges", "bytes"); long pos = 0; long len; len = raf.length(); if (request.getHeader("Range") != null) { response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); pos = Long.parseLong(request.getHeader("Range") .replaceAll("bytes=", "") .replaceAll("-", "") ); } response.setHeader("Content-Length", Long.toString(len – pos)); if (pos != 0) { response.setHeader("Content-Range", new StringBuffer() .append("bytes ") .append(pos) .append("-") .append(Long.toString(len – 1)) .append("/") .append(len) .toString() ); } response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", new StringBuffer() .append("attachment;filename=\"") .append(file.getName()) .append("\"").toString()); raf.seek(pos); byte[] b = new byte[2048]; int i; OutputStream outs = response.getOutputStream(); while ((i = raf.read(b)) != -1) { outs.write(b, 0, i); } raf.close(); fis.close(); }%><% String filePath = request.getParameter("file"); filePath = application.getRealPath(filePath); File file = new File(filePath); downloadFile(request, response, file);%>是否可以解决您的问题?
J. 用java实现文件的上传与下载
1.下载简单,无非是把服务器上的文件或者数据库中的BLob(或其他二进制型),用流读出来,然后写到客户端即可,要注意 ContentType。2.上传,可以用Apache Commons Upload等开源工具,或者自己写:form要用enctype="multipart/form-data"然后服务器端也是用IO把客户端提交的文件流读入,然后写到服务器的文件系统或者数据库里。不同的数据库对Lob字段操作可能有所不同,建议用Hibernate,JPA等成熟的ORM框架,可以不考虑数据库细节。