1. Introducción
La nube no es un concepto nuevo. ¿Qué es exactamente la nube? Incluso si me pides que lo explique claramente, no puedo explicarlo. Por el momento, se llama nube si está conectada a Internet. Todavía hay muchos proveedores de servicios en la nube nacionales, y hay dos categorías principales: una es un proveedor de nube similar a Alibaba Cloud, como Wanwang y otros proveedores de espacio tradicionales, y la otra es el alojamiento de aplicaciones, como BAE. SAE. En comparación con proveedores de espacio como Alibaba Cloud, el nivel de entrada para las plataformas de alojamiento de aplicaciones es más bajo, lo que proporciona una buena plataforma de prueba para la mayoría de los programadores con dificultades.
El programa de actualización de software del que fui responsable recientemente involucraba múltiples plataformas, múltiples archivos y múltiples versiones. Si construyera mi propio servidor de archivos, el ancho de banda definitivamente no podría satisfacer las necesidades comerciales, así que comencé a usar el servicio Baidu Cloud Storage BCS. Ahora funciona normalmente, pero las convulsiones intermitentes ocasionales me obligaron a recurrir a Alibaba Cloud Storage. Después de todo, las cosas comerciales aún deben comercializarse y ser profesionales. Al menos si hay un problema, a diferencia de Baidu Cloud Storage, el servicio al cliente no puede. estar. Pero como uso técnico, hablemos del uso del almacenamiento en la nube.
2. Pasos de uso
1. Registre una cuenta de Baidu
No necesito decir esto.
2. Llamado desarrollador
Ingrese "Baidu Open Cloud Platform" (yo no conozco a Baidu). Si no es un desarrollador después de iniciar sesión, se le pedirá que se registre como desarrollador. Después de completar la información, estará bien.
3. Crea una aplicación
Vaya a la página de inicio de Baidu Open Cloud y cree un motor de aplicación BAE. Al crear, no elija la solución: use BAE a menos que todavía tenga un sitio web al que seguir. Está bien intentarlo. Luego, después de ingresar, seleccione el almacenamiento en la nube y cree un depósito (se explicará más adelante).
4. Descargar SDK
5. Código de prueba
3. Dificultades y Atenciones
1. Un SDK que no tiene una API o que no tiene una API detallada requiere mucha energía para leer y ni siquiera es tan conveniente como leer los blogs de otras personas.
2. Comprensión de conceptos
Depósito: Después de crear una aplicación, se creará un Depósito. ¿Qué es un Depósito? Piense en ello como una letra de unidad en Windows, tal como crea una unidad D, donde también puede colocar archivos y carpetas. ser creado. En realidad, es inexacto decir que Bucket es una letra de unidad porque se parece más al directorio raíz en Linux. Al leer su archivo, no puede decir que mi archivo es: 1.txt. En su lugar: /1.txt. Declarado en el código.
Objeto: un objeto representa un archivo. Consta de una gran cantidad de metainformación y bloques de archivos (consulte el sistema de archivos). La metainformación incluye el nombre del archivo, el tamaño del archivo, la hora, etc. Antes de usar Object, asegúrese de recordar "/";
3. Descargar autenticación
El uso de solicitudes http para descargar archivos privados requiere parámetros de autenticación. Si lee la API oficial, solo explica el proceso de cifrado de autorización, pero no explicaré específicamente los pasos de autorización. Debido a que se implementó en el SDK, solo hay un pequeño problema. El "/" entre el depósito y el nombre del archivo de la dirección de descarga generado por el SDK está codificado, lo que hará que algunos descargadores no puedan descargar. Por ejemplo, el QQ móvil no puede descargar. Necesita ser procesado nuevamente.
4. Clave API y clave secreta
Accede a la aplicación a través de este.
4. Implementación detallada
1. Paquete de guía
2. Parte del código
Autorización:
Copie el código de código de la siguiente manera:
clase pública BCSHelper {
host de cadena privada = "";//Nombre de host: bcs.duapp.com
private String accessKey = ""; //Se puede ver en la aplicación que creas
cadena privada clavesecreta = "";
private String bucket = "";//El nombre del depósito que creaste
privado BaiduBCS baiduBCS = nulo;
público BCSHelper() {
this.host = Configuración.getHost();
this.accessKey = Configuración.getAccessKey();
this.secretKey = Configuración.getSecretKey();
this.bucket = Configuración.getBucket();
Credenciales BCSCredentials = nuevas BCSCredentials(accessKey, secretKey);
baiduBCS = nuevo BaiduBCS (credenciales, host);
baiduBCS.setDefaultEncoding("UTF-8"); // UTF-8 predeterminado
}
Cargar y eliminar archivos:
Copie el código de código de la siguiente manera:
/**
* Subir archivos a BCS
*
* @return booleano verdadero indica que la carga se realizó correctamente
* archivo @param
* Archivos a subir
*
*******/
putObject público booleano (archivo de archivo) {
resultado booleano = verdadero;
intentar {
//Debe comenzar con "/"
Solicitud PutObjectRequest = nueva PutObjectRequest(depósito, "/" + file.getName(), archivo);
//Establecer metainformación del objeto
Metadatos de ObjectMetadata = new ObjectMetadata();
request.setMetadata(metadatos);
baiduBCS.putObject(solicitud);
LoggerService.addLoggerByOperate("BCS: cargar archivos a BCS:"+file.getName());
} captura (Excepción e) {
resultado = falso;
LoggerService.addLoggerByError(e.getMessage());
e.printStackTrace();
}
resultado de devolución;
}
/**
* Eliminar archivos en BCS por nombre de objeto
*
* objeto @param
* Nombre del objeto
* @return boolean true eliminación exitosa
* *****/
eliminarObjeto booleano público (objeto de cadena) {
resultado booleano = verdadero;
intentar {
si (existObject(objeto)) {
baiduBCS.deleteObject(depósito, "/" + objeto);
LoggerService.addLoggerByOperate("BCS: Eliminar archivos en BCS:"+objeto);
}
} captura (Excepción e) {
resultado = falso;
e.printStackTrace();
LoggerService.addLoggerByError(e.getMessage());
}
resultado de devolución;
}
Determinar si el objeto existe:
Copie el código de código de la siguiente manera:
/**
* Determinar si el archivo existe en BCS
*
* objeto @param
* nombre del objeto
* @return booleano verdadero indica existencia
* ***/
existeObject público booleano (objeto de cadena) {
resultado booleano = falso;
intentar {
resultado = baiduBCS.doesObjectExist(depósito, "/" + objeto);
} captura (Excepción e) {
e.printStackTrace();
}
resultado de devolución;
}
Genere una dirección de descarga escrita por usted mismo:
Copie el código de código de la siguiente manera:
/**
* Obtenga la dirección de descarga del Objeto
*
* objeto @param
* Nombre del objeto
* @return String Devuelve la URL descargada
*******/
cadena pública getUrl (objeto de cadena) {
// Contenido que necesita ser cifrado
Datos de cadena = "MBO" + "/n" + "Método=GET" + "/n" + "Bucket=" + depósito + "/n" + "Objeto=/" + objeto + "/n";
//Resultado cifrado
Cadena hmacsha1 = getHmacSHA1(clavesecreta, datos);
// Construir parámetro de signo
Signo de cadena = "MBO:" + accessKey + ":" + hmacsha1;
// URL
Constructor StringBuilder = nuevo StringBuilder();
constructor.append("http://");
constructor.append(host);
constructor.append("/");
constructor.append(depósito);
constructor.append("/");
constructor.append(objeto);
constructor.append("?sign=");
constructor.append(signo);
devolver constructor.toString();
}
// Cifrado de firma
cadena privada getHmacSHA1 (cadena clave secreta, datos de cadena) {
Resultado de cadena = "";
intentar {
SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes(), "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(clave de firma);
byte[] rawHmac = mac.doFinal(data.getBytes());
Base64 base64 = nueva Base64();
@SuppressWarnings("acceso estático")
byte[] enbytes = base64.encodeBase64Chunked(rawHmac);
resultado = nueva cadena (enbytes, "utf-8");
} captura (Excepción e) {
e.printStackTrace();
}
resultado de devolución;
}
Dirección generada por el SDK modificado:
Copie el código de código de la siguiente manera:
* Obtenga la dirección de descarga del Objeto
*
* objeto @param
* Nombre del objeto
* @return String Devuelve la URL descargada
*******/
cadena pública getUrl (objeto de cadena) {
Resultado de cadena = "";
GenerateUrlRequest generateUrlRequest = new GenerateUrlRequest(HttpMethodName.GET, depósito, "/" + objeto);
generateUrlRequest.setBcsSignCondition(nueva BCSSignCondition());
resultado = baiduBCS.generateUrl(generateUrlRequest);
resultado=resultado.replaceFirst("%2F", "/");
resultado de devolución;
}
También hay muchos códigos de prueba proporcionados por el funcionario, y yo también los proporcioné, si es necesario, descárguelos y estúdielos usted mismo, y luego encapsúlelos y utilícelos en proyectos reales que no he encontrado. El progreso de la carga de archivos. Espero que puedas contarme lo que ves, después de todo, él también es un novato.