java的oss下载功能 并通知前端以附件的形式保存

文件在oss中的所有文件 直接下载触发浏览器的下载功能  如果需要验证权限的话 加上JWT生成的token之类的

需要的参数为  
HttpServletRequest request, HttpServletResponse response,String filePath,String Jwt_token

其中filepath 则是访问阿里文件的全入径  不需要前端做多余的操作   Jwt_token则是用户登录 有效的凭证

代码直接是:

 
try {
            logger.info("【BillCommonFileServiceImpl】 download ==begin "+filePath);
            final String aliUrl="";//访问oss上文件的http://*。。。。aliyuncs.com/需要替换掉  直接是
            filePath=filePath.replaceAll(aliUrl,"");
            String[] split = filePath.split("/");
            String fileName= URLDecoder.decode(split[split.length-1],"UTF-8");//阿里的key值  utf8
            // 从阿里云进行下载
            //bucketName需要自己设置
            OSSClient client =createOSSClient();
            OSSObject ossObject = client.getObject(aliyunOSSConfig.getBucket(),filePath);
            // 已缓冲的方式从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取
            BufferedReader reader = new BufferedReader(new InputStreamReader(ossObject.getObjectContent()));

            InputStream inputStream = ossObject.getObjectContent();

            //缓冲文件输出流
            BufferedOutputStream outputStream=new BufferedOutputStream(response.getOutputStream());
            //通知浏览器以附件形式下载
            // response.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8"));
            // 为防止 文件名出现乱码
            response.setContentType("application/doc");
            final String userAgent = request.getHeader("USER-AGENT");
            if(StringUtils.contains(userAgent, "MSIE")){//IE浏览器
                fileName = URLEncoder.encode(fileName,"UTF-8");
            }else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器
                fileName = new String(fileName.getBytes(), "ISO8859-1");
            }else{
                fileName = URLEncoder.encode(fileName,"UTF-8");//其他浏览器
            }
            response.addHeader("Content-Disposition", "attachment;filename=" +fileName);//这里设置一下让浏览器弹出下载提示框,而不是直接在浏览器中打开
            logger.info("【BillCommonFileServiceImpl】 download ==end "+filePath);

            // 进行解码 如果上传时为了防止乱码 进行解码使用此方法
            BASE64Decoder base64Decoder = new BASE64Decoder();
//            byte[] car;
//            while (true) {
//                String line = reader.readLine();
//                if (line == null) break;
//                car =  base64Decoder.decodeBuffer(line);
//
//                outputStream.write(car);
//            }
//            reader.close();

            byte[] car = new byte[1024];
            int L;

            while((L = inputStream.read(car)) != -1){
                if (car.length!=0){
                    outputStream.write(car, 0,L);
                }
            }

            if(outputStream!=null){
                outputStream.flush();
                outputStream.close();
            }
            if (client !=null){
                client.shutdown();
            }

        } catch (IOException e) {
            logger.error("【BillCommonFileServiceImpl】 download ==IOException "+e.getMessage());
            e.printStackTrace();

        } catch (OSSException e){
            logger.error("【BillCommonFileServiceImpl】 download ==OSSException "+e.getMessage());
        }

 

借鉴来源  https://www.cnblogs.com/memoryXudy/p/7805243.html

再次谢谢大佬的分享  

你可能感兴趣的:(java)