Hay dificultades al descargar archivos OSS de Alibaba Cloud al archivo local especificado

Código de archivo de descarga de OSS:

public void ossDownloadFile(String path){
    
    
		OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        File file = new File(path);

        if (!file.getParentFile().exists()){
    
    
            file.getParentFile().mkdirs();
        }
        if("/".equals(path.substring(0,1))){
    
    
            path = path.substring(1);
        }
        // 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
        ossClient.getObject(new GetObjectRequest(bucketName, path), file);

        // 关闭OSSClient。
        ossClient.shutdown();
    }
ossClient.getObject(new GetObjectRequest(bucketName, path), file);

En la oración anterior, parece que el último archivo de parámetros debería poder especificar un archivo local, pero parece estar limitado a la dirección local consistente con la ruta, y se informará un error después de cambiar a otra dirección especificada:

com.eaglesoft.cfxt.common.exception.UIASException: Cannot read the content input stream.
[ErrorCode]: Unknown
[RequestId]: Unknown

Rastree el código fuente hasta la capa inferior, PD: esta depuración es más dolorosa, porque el local no se puede depurar y solo se puede ejecutar después del lanzamiento para ver los registros. Entonces no es depuración, y no sé si lo estoy rastreando bien.
inserte la descripción de la imagen aquí
Como se puede ver en la figura anterior, no hay requisitos para la ruta y la salida se envía directamente al archivo especificado. No sé dónde está el pozo.

Solución alternativa:
el flujo de archivos se puede descargar en el documento OSS, primero obtenga el flujo de archivos de acuerdo con la clave y luego use io para descargarlo al local:

public boolean ossDownloadFileToLocal(String path,String localPath){
    
    
        File file = new File(localPath);
        if (!file.getParentFile().exists()){
    
    
            file.getParentFile().mkdirs();
        }

        log.info("localPath : " + localPath);

        if("/".equals(path.substring(0,1))){
    
    
            path = path.substring(1);
        }
        try (FileOutputStream fos = new FileOutputStream(file)){
    
    
            // 下载OSS文件流
            OSSObject object = ossClient.getObject(bucketName, path);

            InputStream is = object.getObjectContent();
            byte[] b = new byte[1024];
            int length;
            while((length= is.read(b)) != -1){
    
    
                fos.write(b,0,length);
            }

            is.close();

            // 关闭OSSClient。
            ossClient.shutdown();
        }catch (IOException e){
    
    
            throw new UIASException(e.getMessage());
        }

        return true;
    }

Supongo que te gusta

Origin blog.csdn.net/qq_16253859/article/details/106375794
Recomendado
Clasificación