릴리스 노트
제품 공지
var config = {// Tencent Cloud 키를 획득합니다. 제한된 권한을 가진 서브 사용자의 키 사용을 권장합니다. https://console.tencentcloud.com/cam/capisecretId: process.env.COS_SECRET_ID,secretKey: process.env.COS_SECRET_KEY,// 키 유효 기간durationSeconds: 1800,// 여기에 버킷 및 리전을 입력합니다. 예: test-1250000000, ap-guangzhoubucket: process.env.PERSIST_BUCKET,region: process.env.PERSIST_BUCKET_REGION,// 제한된 업로드 확장자extWhiteList: ['jpg', 'jpeg', 'png', 'gif', 'bmp'],};
npm install
node app.js
import http from '@ohos.net.http';/*** 직접 업로드 url 및 서명 등 획득** @param ext 파일 확장자. 직접 업로드 시 서버드에서 확장자에 따라 cos key 생성* @return 직접 업로드 url 및 서명 등*/public static async getStsDirectSign(ext: string): Promise<Object> {// 각 httpRequest는 하나의 HTTP 요청 작업에 해당하며 재사용할 수 없음let httpRequest = http.createHttp();//직접 업로드 서명 비즈니스 서버 url(정식 환경에서는 정식 직접 업로드 서명 비즈니스 url로 교체해 주세요)//직접 업로드 서명 비즈니스 서버 코드 예제는 다음을 참고하세요: https://github.com/tencentyun/cos-demo/blob/main/server/direct-sign/nodejs/app.jslet url = "http://127.0.0.1:3000/sts-direct-sign?ext=" + ext;try {let httpResponse = await httpRequest.request(url, { method: http.RequestMethod.GET });if (httpResponse.responseCode == 200) {let result = JSON.parse(httpResponse.result.toString())if (result.code == 0) {return result.data;} else {console.info(`getStsDirectSign error code: ${result.code}, error message: ${result.message}`);}} else {console.info("getStsDirectSign HTTP error code: " + httpResponse.responseCode);}} catch (err) {console.info("getStsDirectSign Error sending GET request: " + JSON.stringify(err));} finally {// 해당 요청 사용이 완료되면 destroy 메서드를 호출하여 직접 파기합니다.httpRequest.destroy();}return null;}
import http from '@ohos.net.http';import promptAction from '@ohos.promptAction'import fs from '@ohos.file.fs';import request from '@ohos.request';import common from '@ohos.app.ability.common';import { MediaBean } from '../bean/MediaBean';import { MediaHelper } from './MediaHelper';/*** 파일 업로드(uploadTask로 구현)* @param context context* @param media 미디어 파일*/public static async uploadFileByTask(context: common.Context, media: MediaBean, progressCallback: (uploadedSize: number, totalSize: number) => void) {// 직접 업로드 서명 등 정보 획득let ext = MediaHelper.getFileExtension(media.fileName);let directTransferData: any = await UploadHelper.getStsDirectSign(ext);if (directTransferData == null) {promptAction.showToast({ message: 'getStsDirectSign fail' });return;}// 비즈니스 서버에서 반환된 업로드 정보let cosHost: String = directTransferData.cosHost;let cosKey: String = directTransferData.cosKey;let authorization: String = directTransferData.authorization;let securityToken: String = directTransferData.securityToken;// 업로드 url 생성let url = `https://${cosHost}/${cosKey}`;try {// uri 파일을 cacheDir에 복사(request.uploadFile은 internal: 유형의 경로만 허용)let file = await fs.open(media.fileUri, fs.OpenMode.READ_ONLY);let destPath = context.cacheDir + "/" + media.fileName;await fs.copyFile(file.fd, destPath);let realuri = "internal://cache/" + destPath.split("cache/")[1];let uploadConfig = {url: url,header: {"Content-Type": "application/octet-stream","Authorization": authorization,"x-cos-security-token": securityToken,"Host": cosHost},method: "PUT",files: [{ filename: media.fileName, name: "file", uri: realuri, type: ext }],data: []};// 업로드 시작let uploadTask = await request.uploadFile(context, uploadConfig)uploadTask.on('progress', progressCallback);let upCompleteCallback = (taskStates) => {for (let i = 0; i < taskStates.length; i++) {promptAction.showToast({ message: '업로드 성공' });console.info("upOnComplete taskState:" + JSON.stringify(taskStates[i]));}};uploadTask.on('complete', upCompleteCallback);let upFailCallback = (taskStates) => {for (let i = 0; i < taskStates.length; i++) {promptAction.showToast({ message: '업로드 실패' });console.info("upOnFail taskState:" + JSON.stringify(taskStates[i]));}};uploadTask.on('fail', upFailCallback);} catch (err) {console.info("uploadFile Error sending PUT request: " + JSON.stringify(err));promptAction.showToast({ message: "uploadFile Error sending PUT request: " + JSON.stringify(err) });}}
Esta página foi útil?
Você também pode entrar em contato com a Equipe de vendas ou Enviar um tíquete em caso de ajuda.
comentários