經過阿里OSS文件服務返回的URL獲取文件流下載

咱們都知道將文件上傳到阿里的OSS文件服務上後,能夠經過generatePresignedUrl(bucketName, key, expiration)方法獲取該文件的防問路徑,可是當咱們知道該文件的訪問路徑該如何經過路徑獲取該文件的下載流呢?app

  一、截取文件訪問路徑,只要該文件的名稱。編碼

  二、經過阿里API提供的getObject方法獲取文件信息spa

@GetMapping("/downLoadImage")
    public void downLoadImage(String fileName, HttpServletResponse response) {
        if (StringUtils.isNotBlank(fileName)) {
            OSSObject ossObject = downLoadImage(fileName);
            if (ossObject != null) {
                InputStream inputStream = ossObject.getObjectContent();
                int buffer = 1024 * 10;
                byte data[] = new byte[buffer];
                try {
                    response.setContentType("application/octet-stream");
                    // 文件名能夠任意指定
                    response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName,"UTF-8"));//將文件名轉爲ASCLL編碼
                    int read;
                    while ((read = inputStream.read(data)) != -1) {
                        response.getOutputStream().write(data, 0, read);
                    }
                    response.getOutputStream().flush();
                    response.getOutputStream().close();
                    ossObject.close();
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }




public OSSObject downLoadImage(String fileName) {

        OSSClient ossClient = getInstance();
        Date expiration = new Date(new Date().getTime() + 3600 * 1000);
        GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, fileName, HttpMethod.GET);
        // 設置過時時間。
        request.setExpiration(expiration);
        // 生成簽名URL(HTTP GET請求)。
        URL signedUrl = ossClient.generatePresignedUrl(request);
        // 使用簽名URL發送請求。
        Map<String, String> customHeaders = new HashMap<String, String>();
        // 添加GetObject請求頭。
        //customHeaders.put("Range", "bytes=100-1000");
        OSSObject object = ossClient.getObject(signedUrl, customHeaders);
        return object;
    }


    public static synchronized OSSClient getInstance() {
        OSSClient ossClient = connInstances.get("oss");
        if (ossClient == null) {
            synchronized (FileUploadServiceImpl.class) {
                if (ossClient == null) {
                    ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
                }
            }
        }
        return ossClient;
    }
相關文章
相關標籤/搜索