1. 소개
클라우드는 새로운 개념이 아닌데, 클라우드가 정확히 무엇인지 명확하게 설명해 달라고 해도 일단은 인터넷에 연결되어 있으면 클라우드라고 합니다. 국내 클라우드 서비스 제공업체는 여전히 많으며 두 가지 주요 범주가 있습니다. 하나는 Wanwang 및 기타 전통적인 공간 제공업체와 같은 Alibaba Cloud와 유사한 호스트형 클라우드 제공업체이고, 다른 하나는 BAE와 같은 애플리케이션 호스팅입니다. SAE. Alibaba Cloud와 같은 공간 제공업체에 비해 애플리케이션 호스팅 플랫폼의 입문 수준이 낮아 어려움을 겪고 있는 대부분의 프로그래머에게 좋은 테스트 플랫폼을 제공합니다.
최근 제가 맡은 소프트웨어 업그레이드 프로그램은 여러 플랫폼, 여러 파일, 여러 버전이 관련되어 있었는데, 직접 파일 서버를 구축하면 대역폭이 비즈니스 요구 사항을 충족할 수 없기 때문에 Baidu Cloud Storage BCS 서비스를 사용하기 시작했습니다. 지금은 정상적으로 작동하지만 가끔씩 간헐적으로 발생하는 경련으로 인해 Alibaba Cloud Storage로 전환하게 되었는데, 결국 상업적인 것은 여전히 상용화되고 전문화되어야 합니다. 최소한 Baidu Cloud Storage와 달리 문제가 있으면 고객 서비스를 이용할 수 없습니다. 찾을 수 있습니다. 하지만 기술적인 용도로는 클라우드 스토리지의 용도에 대해 이야기해 보겠습니다.
2. 사용 단계
1. 바이두 계정 등록
나는 이것을 말할 필요가 없습니다.
2. 개발자에게 전화하기
"Baidu Open Cloud Platform"을 입력하세요(저는 Baidu를 모릅니다). 로그인 후 개발자가 아닌 경우 정보를 입력한 후 개발자로 등록하라는 메시지가 표시됩니다.
3. 애플리케이션 만들기
Baidu Open Cloud 홈페이지로 이동하여 BAE 애플리케이션 엔진을 생성하세요. 생성할 때 솔루션을 선택하지 마세요. 아직 사용할 웹사이트가 없으면 BAE를 사용하세요. 한번 시도해봐도 괜찮습니다. 그리고 진입 후 cloud Storage를 선택하고 Bucket을 생성합니다(추후 설명).
4. SDK 다운로드
5. 테스트 코드
3. 어려움과 주의사항
1. API가 없거나 상세한 API가 없는 SDK는 읽는 데 많은 에너지가 필요하고, 다른 사람의 블로그를 읽는 것만큼 편리하지도 않습니다.
2. 개념의 이해
버킷: 애플리케이션을 생성하면 버킷이 생성됩니다. 버킷이란 Windows에서 D 드라이브를 만드는 것과 마찬가지로 파일과 폴더를 넣을 수 있는 드라이브 문자라고 생각하세요. 생성됩니다. Bucket은 Linux의 루트 디렉터리에 더 가깝기 때문에 실제로는 Bucket이 드라이브 문자라고 말하는 것은 정확하지 않습니다. 파일을 읽을 때 내 파일이 1.txt라고 말할 수는 없습니다. 대신: /1.txt. 코드에서 선언되었습니다.
객체(Object) : 객체는 파일을 의미하며, 수많은 메타정보와 파일블록으로 구성된다(파일시스템 참고). 메타정보에는 파일명, 파일크기, 시간 등이 포함된다. Object를 사용하기 전에 "/"를 기억하세요.
3. 인증 다운로드
개인 파일을 다운로드하기 위해 http 요청을 사용하려면 인증 매개변수가 필요합니다. 공식 API를 읽으면 인증의 암호화 프로세스만 설명하고 Java 버전은 구체적으로 설명하지 않습니다. Java 구현도 제공합니다. , SDK에서 구현되었기 때문에 작은 문제가 있을 뿐입니다. SDK에서 생성된 다운로드 주소의 파일명과 Bucket 사이의 "/"가 인코딩되어 있어 일부 다운로더에서는 다운로드가 실패할 수 있습니다. 다시 처리해야 합니다.
4. API 키 및 비밀 키
이를 통해 앱에 접속하세요.
4. 세부 구현
1. 가이드 패키지
2. 코드의 일부
권한 부여:
다음과 같이 코드 코드를 복사합니다.
공개 클래스 BCSHelper {
개인 문자열 호스트 = "";//호스트 이름: bcs.duapp.com
private String accessKey = "" //생성한 애플리케이션에서 볼 수 있습니다.
개인 문자열 secretKey = "";
private String bucket = "";//생성한 버킷의 이름
개인 BaiduBCS baiduBCS = null;
공개 BCSHelper() {
this.host = Configuration.getHost();
this.accessKey = Configuration.getAccessKey();
this.secretKey = Configuration.getSecretKey();
this.bucket = Configuration.getBucket();
BCSCredentials 자격 증명 = new BCSCredentials(accessKey, secretKey);
baiduBCS = new BaiduBCS(자격 증명, 호스트);
baiduBCS.setDefaultEncoding("UTF-8") // 기본 UTF-8
}
파일 업로드 및 삭제:
다음과 같이 코드 코드를 복사합니다.
/**
* BCS에 파일 업로드
*
* @return boolean true는 업로드가 성공했음을 나타냅니다.
* @param 파일
* 업로드할 파일
*
*******/
공개 부울 putObject(파일 파일) {
부울 결과 = true;
노력하다 {
//"/"로 시작해야 함
PutObjectRequest 요청 = new PutObjectRequest(bucket, "/" + file.getName(), file);
//Object의 메타정보 설정
ObjectMetadata 메타데이터 = new ObjectMetadata();
request.setMetadata(메타데이터);
baiduBCS.putObject(요청);
LoggerService.addLoggerByOperate("BCS: BCS에 파일 업로드:"+file.getName());
} 잡기(예외 e) {
결과 = 거짓;
LoggerService.addLoggerByError(e.getMessage());
e.printStackTrace();
}
결과 반환;
}
/**
* 개체 이름으로 BCS에서 파일 삭제
*
* @param 객체
* 객체 이름
* @return boolean true 삭제 성공
* *****/
공개 부울 deleteObject(문자열 객체) {
부울 결과 = true;
노력하다 {
if (existObject(객체)) {
baiduBCS.deleteObject(bucket, "/" + 개체);
LoggerService.addLoggerByOperate("BCS: BCS에서 파일 삭제:"+object);
}
} 잡기(예외 e) {
결과 = 거짓;
e.printStackTrace();
LoggerService.addLoggerByError(e.getMessage());
}
결과 반환;
}
개체가 존재하는지 확인합니다.
다음과 같이 코드 코드를 복사합니다.
/**
* 파일이 BCS에 존재하는지 확인
*
* @param 객체
* 객체 이름
* @return boolean true는 존재함을 나타냅니다.
* ***/
공개 부울 존재 개체(문자열 개체) {
부울 결과 = false;
노력하다 {
result = baiduBCS.doesObjectExist(bucket, "/" + object);
} 잡기(예외 e) {
e.printStackTrace();
}
결과 반환;
}
직접 작성한 다운로드 주소 생성:
다음과 같이 코드 코드를 복사합니다.
/**
* 개체의 다운로드 주소를 가져옵니다
*
* @param 객체
* 객체 이름
* @return String 다운로드한 URL을 반환합니다.
*******/
공개 문자열 getUrl(문자열 개체) {
// 암호화가 필요한 콘텐츠
문자열 데이터 = "MBO" + "/n" + "메소드=GET" + "/n" + "버킷=" + 버킷 + "/n" + "객체=/" + 객체 + "/n";
//암호화된 결과
String hmacsha1 = getHmacSHA1(비밀키, 데이터);
// 부호 매개변수 구성
문자열 기호 = "MBO:" + accessKey + ":" + hmacsha1;
// URL
StringBuilder 빌더 = 새로운 StringBuilder();
builder.append("http://");
builder.append(호스트);
builder.append("/");
builder.append(버킷);
builder.append("/");
builder.append(객체);
builder.append("?sign=");
builder.append(sign);
return builder.toString();
}
// 서명 암호화
개인 문자열 getHmacSHA1(문자열 secretKey, 문자열 데이터) {
문자열 결과 = "";
노력하다 {
SecretKeySpec signedKey = new SecretKeySpec(secretKey.getBytes(), "HmacSHA1");
맥 mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(data.getBytes());
Base64 base64 = 새로운 Base64();
@SuppressWarnings("정적 액세스")
byte[] enbytes = base64.encodeBase64Chunked(rawHmac);
결과 = new String(enbytes, "utf-8");
} 잡기(예외 e) {
e.printStackTrace();
}
결과 반환;
}
수정된 SDK 생성 주소:
다음과 같이 코드 코드를 복사합니다.
* 개체의 다운로드 주소를 가져옵니다
*
* @param 객체
* 객체 이름
* @return String 다운로드한 URL을 반환합니다.
*******/
공개 문자열 getUrl(문자열 객체) {
문자열 결과 = "";
생성UrlRequest generateUrlRequest = new 생성UrlRequest(HttpMethodName.GET, 버킷, "/" + 개체);
generateUrlRequest.setBcsSignCondition(new BCSSignCondition());
결과 = baiduBCS.generateUrl(generateUrlRequest);
result=result.replaceFirst("%2F", "/");
결과 반환;
}
공식에서 제공한 테스트 코드도 많이 있고, 제가 제공한 것도 있으니 필요하신 분들은 다운받아서 직접 공부해보시고, 캡슐화해서 실제 프로젝트에 활용해보세요. 파일업로드 진행상황을 보시고 말씀해주시길 바라겠습니다. 결국 그 사람도 신인이니까요.