本文目录一览:
- 1、java编程:我在做一个上传文件的下载,下载方法返回的是InputStream类型,这样的话如果文件存在,点击
- 2、java数据库blob字段的下载(读取)
- 3、用java程序来做限速,下载文件的代码修改
- 4、java不在磁盘创建文件,直接返回流给用户下载
- 5、java下载功能实现
- 6、求问Java文件下载的几种方式
java编程:我在做一个上传文件的下载,下载方法返回的是InputStream类型,这样的话如果文件存在,点击
无论是servlet还是springmvc,一般的做法是先用一个servlet或method处理数据,如果正常才会跳转到下载用的servlet或method。 如果不正常,直接转错误提示画面就好了。
java数据库blob字段的下载(读取)
这是我以前写的代码,放在action里。图片在pojo类中对应为byte[]类型,clxxb是一个pojo类,clxxb.getClpic()得到图片对应的字节数组byte[]。其实输出文件就是输出一个字节流。希望对你有帮助。
InputStream input=clxxb.getClpic().getBinaryStream();
byte[] buffer=new byte[input.available()];
ServletOutputStream out=response.getOutputStream();
int length=0;
while((length=input.read(buffer))!=-1){
out.write(buffer,0,length);
}
out.flush();
out.close();
用java程序来做限速,下载文件的代码修改
用java程序来做限速,方向就有问题,如果大并发量,都要控制速度你程序早就挂了。应该用应用服务器(我想你用的tomcat吧)+http服务器控制,这里用apache就可以了。用apache来做限速才是正确的,用程序代码几乎是没法限速,http 协议是无状态的协议。
当然你一定要做, 那就是写一定数量流,拿这个数据流的大小与你限速的平均量比,如果超过了就程序暂停一会。(这样设计很不合理,但可以达到你的要求)
还有两个,快了
java不在磁盘创建文件,直接返回流给用户下载
没懂你的意思,用户要下载的东西是什么?不是在磁盘上的东西么?还是下载的是程序自己生成的数据?如果是程序自己生成的数据,那就更简单了呀~建议用java.nio来做,先生成把要传的数据写入缓冲区,再将缓冲区的数据写入通道.我还没懂你的提问是什么意思?所以没办法给你写例子,我发一段考贝文件的例子给你
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class CopyFile {
public static void main(String[] args) {
ByteBuffer bb=null;
try {
// FileOutputStream fileOut=new FileOutputStream("f:\\1.txt");
// FileInputStream fileIn=new FileInputStream("f:\\2.txt");
RandomAccessFile raf=new RandomAccessFile("f://1.txt","rw");
RandomAccessFile rafo=new RandomAccessFile("f://2.txt","rw");
//获得写入和读取通道
FileChannel foc=raf.getChannel();
FileChannel fic=rafo.getChannel();
//分配缓冲区大小
bb=ByteBuffer.allocate(1024);
//将数据读入缓冲区
foc.read(bb);
bb.put("还可以加入数据".getBytes());
//反转数据,反转以后,不能再放数据
bb.flip();
fic.write(bb);
} catch (Exception e) {
}finally{
bb.clear();
}
}
}
java下载功能实现
楼主得在后台的控制器中用reponse的输出流转化一下,我给你个例子。
InputStream fis = new BufferedInputStream(new FileInputStream(filePath));byte[] buffer = new byte[fis.available()];fis.read(buffer);fis.close();response.reset();response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("gbk"),"ISO-8859-1"));response.addHeader("Content-Length", "" + excelFile.length());OutputStream toClient = new BufferedOutputStream(response.getOutputStream());response.setContentType("application/octet-stream");toClient.write(buffer);toClient.flush();toClient.close();
求采纳为满意回答。
求问Java文件下载的几种方式
InputStream fis = new BufferedInputStream(new FileInputStream(path));byte[] buffer = new byte[fis.available()];fis.read(buffer);fis.close();// 清空responseresponse.reset();// 设置response的Headerresponse.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));response.addHeader("Content-Length", "" + file.length());OutputStream toClient = new BufferedOutputStream(response.getOutputStream());response.setContentType("application/octet-stream");toClient.write(buffer);toClient.flush();toClient.close();} catch (IOException ex) {ex.printStackTrace();}return response;}public void downloadLocal(HttpServletResponse response) throws FileNotFoundException {// 下载本地文件String fileName = "Operator.doc".toString(); // 文件的默认保存名// 读到流中InputStream inStream = new FileInputStream("c:/Operator.doc");// 文件的存放路径// 设置输出的格式response.reset();response.setContentType("bin");response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");// 循环取出流中的数据byte[] b = new byte[100];int len;try {while ((len = inStream.read(b)) 0)response.getOutputStream().write(b, 0, len);inStream.close();} catch (IOException e) {e.printStackTrace();}}public void downloadNet(HttpServletResponse response) throws MalformedURLException {// 下载网络文件int bytesum = 0;int byteread = 0;URL url = new URL("windine.blogdriver.com/logo.gif");try {URLConnection conn = url.openConnection();InputStream inStream = conn.getInputStream();FileOutputStream fs = new FileOutputStream("c:/abc.gif");byte[] buffer = new byte[1204];int length;while ((byteread = inStream.read(buffer)) != -1) {bytesum += byteread;System.out.println(bytesum);fs.write(buffer, 0, byteread);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} //支持在线打开文件的一种方式public void downLoad(String filePath, HttpServletResponse response, boolean isOnLine) throws Exception {File f = new File(filePath);if (!f.exists()) {response.sendError(404, "File not found!");return;}BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));byte[] buf = new byte[1024];int len = 0;response.reset(); // 非常重要if (isOnLine) { // 在线打开方式URL u = new URL("" + filePath);response.setContentType(u.openConnection().getContentType());response.setHeader("Content-Disposition", "inline; filename=" + f.getName());// 文件名应该编码成UTF-8} else { // 纯下载方式response.setContentType("application/x-msdownload");response.setHeader("Content-Disposition", "attachment; filename=" + f.getName());}OutputStream out = response.getOutputStream();while ((len = br.read(buf)) 0)out.write(buf, 0, len);br.close();out.close();}