java後臺簡單從阿裏雲下載文件通知前端以附件的形式保存
阿新 • • 發佈:2017-11-08
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後臺簡單從阿裏雲下載文件通知前端以附件的形式保存