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.
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;
}