java後臺簡單從騰訊雲下載文件通知前端以附件的形式保存

 騰訊雲對象存儲和阿里雲差很少html

 

 這是個人配置前端

 /**
     *  騰訊雲client
     * @return COSClient
     */
    public static COSClient getCOSClient() {
 long appId = 00000;
        String secretId = "";
        String secretKey = "";
        // 1 初始化身份信息
        COSCredentials cred = new BasicCOSCredentials(appId , secretId, secretKey);
        // 2 設置 Bucket 的區域, XML的區域詳細信息請參見 可用地域(https://www.qcloud.com/document/product/436/6224) 文檔
        ClientConfig clientConfig = new ClientConfig(new Region("cos.na-toronto"));
        // 3 生成 cos 客戶端
        return new COSClient(cred, clientConfig);
    }

 

 下載代碼  json

@Autowired
    private COSClient cosClient;

    @Override
    public MessageVo getDownLoadFile(String fileName, String cosKey, HttpServletResponse response, HttpServletRequest request) {
        MessageVo messageVo = MessageVoUtil.getMessageVo();
        try {

            // 從騰訊雲下載文件
            GetObjectRequest getObjectRequest = new GetObjectRequest(ManageStaticParam.COSCLIENT_BUCKET_TEST, "/yu/"+cosKey);//bucketName須要本身設置
            COSObject cosObject = cosClient.getObject(getObjectRequest);
            // 已緩衝的方式從字符輸入流中讀取文本,緩衝各個字符,從而提供字符、數組和行的高效讀取
            BufferedReader reader = new BufferedReader(new InputStreamReader(cosObject .getObjectContent()));
            COSObjectInputStream cosObjectInput = cosObject.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);//這裏設置一下讓瀏覽器彈出下載提示框,而不是直接在瀏覽器中打開

            // 進行解碼
            BASE64Decoder base64Decoder = new BASE64Decoder();
            byte[] car= new byte[1024];
            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 = cosObjectInput.read(car)) != -1){
//                    System.out.println(car+"=========="+car.length);
//                    if (car.length!=0){
//                        outputStream.write(car, 0,L);
//                    }
//                }
                outputStream.flush();
                outputStream.close();
                messageVo.setCode(ReturnCodeEnum.處理成功.getStatenum());
            return  messageVo;
        } catch (IOException e) {
            e.printStackTrace();
            messageVo.setCode(ReturnCodeEnum.請求實體不存在.getStatenum());
            messageVo.setData(" Backend file write error !!!");
            return messageVo;
        } catch (CosServiceException e){
            messageVo.setCode(ReturnCodeEnum.請求實體不存在.getStatenum());
            messageVo.setData(" The request entity does not exist  !!!");
            return messageVo;
        }
    }

 

 

注意:在實際使用該方法下載的過程當中,可能遇到服務器不報錯,但就是下載不下來文件的問題,這樣有多是前端頁面發出下載請求的方式有誤,不能使用AJAX的get方式訪問該方法,由於Ajax可以返回的數據格式只能爲html,script,json,xml,不接受流的形式。筆者使用的方式是用window.location.href訪問,或者使用from表單提交方式(GET/POST)。數組

騰訊開放平臺文檔瀏覽器

https://cloud.tencent.com/document/product/436/10199#.E7.AE.80.E5.8D.95.E6.96.87.E4.BB.B6.E4.B8.8A.E4.BC.A0服務器

阿里雲下載連接app

http://blog.csdn.net/qq_35498405/article/details/77942817ide

相關文章
相關標籤/搜索