>

원본 이미지 파일의 크기를 조정하고 덮어 쓰는 클라우드 스토리지에 대한 트리거를 성공적으로 생성했습니다.

return destBucket.file(filePath).download({
    destination: tempFilePath
}).then(() => {
    return spawn('convert', [tempFilePath, '-resize', '150x150', tempFilePath])
}).then(() => {
    metadata.isResized = true
    return destBucket.upload(tempFilePath,
        {
            destination: path.join(path.dirname(filePath), path.basename(filePath)),
            metadata: { metadata: metadata }
        })
}).then(() => fs.unlinkSync(tempFilePath))
});

하지만 Firestore 데이터베이스에 저장 한 파일의 다운로드 URL도 변경됩니다

const pathRef = storageRef.ref('profileImg/' + uid + '/' + image.name)
        pathRef.put(image).then(() => {
            //Get logo URL
            const starsRef = storageRef.ref().child('profileImg/' + uid + '/' + image.name)
            starsRef.getDownloadURL().then((url) => {
                changeProfile({ profile: profile, profileImg: url }).then((result) => {
                    dispatch(progressSuccess(result))
                }).catch((error) => {
                    dispatch(progressFailed(error.message))
                });
            }).catch((error) => {
                dispatch(progressFailed(error.message))
            })

원본 다운로드 URL을 덮어 쓴 파일로 유지하는 방법이 있습니까? 아니면이 작업을 수행 할 방법이 있습니까?


  • 답변 # 1

    Ok 원래 URL을 유지할 방법이 없다고 가정하기 때문에이 작업에 대한 다른 접근 방식을 취해야했습니다. 기본적으로 이제 하나의 스토리지 트리거 기능으로 모든 이미지 (이미지 크기 조정, 원본 이미지 삭제, URL 가져 오기, 사용자 데이터베이스 업데이트)를 수행합니다.

    return destBucket.file(filePath).download({
        destination: tempFilePath
    })
        .then(() => {
            console.log('The file has been downloaded to', tempFilePath)
            return spawn('convert', [tempFilePath, '-resize', '140x140', tempLocalJPEGFile])
        }).then(() => {
            console.log('JPEG image created at', tempLocalJPEGFile)
            metadata.modified = true
            return destBucket.upload(tempLocalJPEGFile,
                {
                    destination: JPEGFilePath,
                    metadata: { metadata: metadata }
                })
        }).then(() => {
            console.log('JPEG image uploaded to Storage at', JPEGFilePath)
            return destBucket.file(filePath).delete()
        }).then(() => {
            console.log('Original file deleted', filePath)
            const logo = storageRef.file(JPEGFilePath)
            return logo.getSignedUrl({ action: 'read', expires: '03-09-2491' })
        }).then((url) => {
            const newRef = db.collection("user").doc(uid)
            return newRef.set({
                profile: {profileImg: url[0]}
            }, {
                merge: true
            })
        }).then(()=> {
            fs.unlinkSync(tempFilePath);
            fs.unlinkSync(tempLocalJPEGFile)
            console.log('User database updated')
            return null
        })
    })
    
    

    이 방법이 최선인지 확실하지 않으므로 언제든지 의견을 말하거나 업데이트하십시오. 또한 db를 업데이트하는 데 필요한 사용자 ID 값 (userImg/[userIdHere] /image.jpg)이라는 이미지가 저장된 버킷에서 폴더 이름을 얻는 더 좋은 방법이 있는지 알지 못했습니다. 구식 분할 코드

    const uid = filePath.split("/").slice(1,2).join("")
    
    

    하지만이 트리거를 사용하면 버킷의 특정 폴더에 대해 트리거를 사용할 수 없으므로 사용자 이미지에만 버킷을 사용할 수 있습니다

  • 이전 email - php 메일 기능 - sendmail mta :우분투 :오류
  • 다음 Homebrew 관리자는 각 수식의 바이너리 진위를 어떻게 보장합니까?