如何检查上传的图片是否实际上是图片

时间:2019-04-13 21:16:37

标签: reactjs google-cloud-functions firebase-storage

有人知道在将图像上传到存储桶之前如何检查图像是否是图像(而不是恶意文件)吗?我已经创建了所有内容,可以使用

将图像上传到存储桶中
  if (logo) {
            //Save photo to bucket
            const pathRef = storageRef.ref('logo/' + uid + '/' + logo.name)
            pathRef.put(logo).then(() => {
                //Get logo URL
                const starsRef = storageRef.ref().child('logo/' + uid + '/' + logo.name)
                starsRef.getDownloadURL().then((url) => {
                    //Update photoURL in user
                    const user = firebase.auth().currentUser
                    user.updateProfile({
                        photoURL: url
                    }).then(() => {
                        console.log("update successfull")
                    }).catch((error) => {
                        console.log(error)
                    })
                }).catch((error) => {
                    console.log(error)
                })
            })

我也只接受“输入”中的图像文件

  <input style={{ display: "none" }} id="file" type="file" accept="image/*" onChange={props.change}></input>

但是我相信可以通过将任何文件更改为图像格式来轻松跳过,这意味着任何人都可以在其中放置任何内容。我没有找到任何文档可以在功能或其他任何地方进行检查

1 个答案:

答案 0 :(得分:0)

Cloud Functions和Cloud Storage没有内置的功能来检查一系列字节是否实际上是图像。对他们来说,字节只是字节,而他们不花力气去解释那些字节。 Cloud Storage将“内容类型”存储为Blob的一部分,但这不能保证博客中的内容。该内容类型只是博客的元数据。

如果您想知道字节序列是否为某种图像格式(并且有很多:JPG,PNG,GIF等),则需要使用其他软件来解析这些字节以找出如果格式化的格式符合您的定义,可以接受。例如,ImageMagick会告诉一些有关被称为图像的文件内容的信息。