java后台简单从阿里云下载文件通知前端以附件的形式保存

Posted Mr.DongYang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java后台简单从阿里云下载文件通知前端以附件的形式保存相关的知识,希望对你有一定的参考价值。

代码块语法:

@Override
    public MessageVo getDownLoadFile(String fileName, String ossKey, HttpServletResponse response) {
// fileName :前台传入的文件名(主要是标识文件是什么格式.png或.zip)
// ossKey:上传文件时阿里云返回的标识
// 配置阿里云基本信息
 String aliyunId = ApplicationPropertyUtils.getContextProperty("ALIYUN_ACCESS_KEY_ID");  
            String aliyunSecret = ApplicationPropertyUtils.getContextProperty("ALIYUN_ACCESS_KEY_SECRET");  
            String ossEndpoint =  ApplicationPropertyUtils.getContextProperty("ALIYUN_OSS_ENDPOINT");  
            OSSClient ossClient  = new OSSClient(ossEndpoint, aliyunId, aliyunSecret);  

// 获取fileid对应的阿里云上的文件对象  
            OSSObject ossObject = ossClient.getObject(bucketName, ossKey);//bucketName需要自己设置  
           // 已缓冲的方式从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取
           BufferedReader reader = new BufferedReader(new    InputStreamReader(ossObject .getObjectContent()));
                  // 缓冲文件输出流
            BufferedOutputStream outputStream=new BufferedOutputStream(response.getOutputStream());
            // 通知浏览器以附件形式下载
            response.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8"));
            // 进行解码 为防止文件出现乱码 文件上传时进行编码处理
            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();

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

        } catch (IOException e) {
            e.printStackTrace();
            message(" Backend file write error !!!");
            return messageVo;

        } catch (OssException e){
          e.printStackTrace();
            message(" The file name or ossKey value is error !!!");
            return messageVo;
        }
    }

注意:在实际使用该方法下载的过程中,可能遇到服务器不报错,但就是下载不下来文件的问题,这样有可能是前端页面发出下载请求的方式有误,不能使用AJAX的get方式访问该方法,因为Ajax能够返回的数据格式只能为html,script,json,xml,不接受流的形式。笔者使用的方式是用window.location.href访问,或者使用from表单提交方式(GET/POST)。

 

借鉴来源:https://www.alibabacloud.com/help/zh/doc-detail/32014.htm

 

以上是关于java后台简单从阿里云下载文件通知前端以附件的形式保存的主要内容,如果未能解决你的问题,请参考以下文章

阿里云附件文件流的形式上传下载

SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后端篇: 整合阿里云 OSS 服务 -- 上传下载文件图片

阿里云oss对象存储 啥意思

Java Web实现使用浏览器从服务器下载文件(后台)

做好的网站怎么上传到阿里云主机

javascript 上传文件到阿里云的oss,上传文件成功后怎么获取文件的真实路径?