1. 程式人生 > >java後臺簡單從阿裏雲下載文件通知前端以附件的形式保存

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

back context ip) cep encode amr 讀取文本 urn https

代碼塊語法:

@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後臺簡單從阿裏雲下載文件通知前端以附件的形式保存