2017-04-07 63 views
0

我正在使用以下代码从s3存储桶中的对象获取内容。我能够将数据复制到本地文件中,但文件需要“下载”并且必须显示在浏览器的下载列表中。 我搜索了一下这个和凸轮知道这与response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\""); 我试图补充一点,但不知何故无法让它工作。我的理解是,源代码必须是转换为流的服务器上的文件。但我以输入流的形式得到s3内容。如何在浏览器中将其作为文件下载? 下面是除了文件读取部代码到目前为止,我已经试过java - 使用servlet下载输入流

AmazonS3 s3 = new AmazonS3Client(new ProfileCredentialsProvider());  
S3Object fetchFile = s3.getObject(new GetObjectRequest(bucketname, fileloc)); 
     final BufferedInputStream i = new BufferedInputStream(fetchFile.getObjectContent()); 
     response.setContentType("application/json"); 
     response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");    
     ServletOutputStream sos = response.getOutputStream(); 
     int bytesread = i.read(); 
     while(bytesread!=-1) 
     { 
      sos.write(bytesread); 
      bytesread = i.read(); 
     } 
     if(i!= null)i.close(); 
     if(sos!= null)sos.close(); 

回答

0

一切都是正确的。

//Set the size of buffer to stream the data. 
    byte []buffer=new byte[1024*8]; 

代替

int byte=i.read(); 

现在读取文件。

while((length = yourInputStream.read(buffer))!=-1) 
    {  yourOutputStream.write(buffer); 
       } 
    System.out.println("File is downloaded."); 

此外,的try/catch内puting你的整个代码块将帮助你知道你的问题的确切原因。

+0

嗨,谢谢!但这并没有什么区别,我也没有得到任何异常 – lavy

+0

嗨,还有其他的见解吗?我仍然坚持这一个:( – lavy