Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js TypeError:无法读取属性';通过tellength';用nodejs定义的未定义的_Node.js_Firebase - Fatal编程技术网

Node.js TypeError:无法读取属性';通过tellength';用nodejs定义的未定义的

Node.js TypeError:无法读取属性';通过tellength';用nodejs定义的未定义的,node.js,firebase,Node.js,Firebase,我无法理解为什么firebase不接受该图像,出现以下消息:TypeError:无法读取未定义的属性“ByTeleLength” 我试图将“byteLength”值添加到我的对象(req.file)中,但同样的错误仍然存在 下面是我的实现 const firebase2 = require('firebase/app'); require('firebase/storage'); router.put('/addimage', multer.single('picture'), async

我无法理解为什么firebase不接受该图像,出现以下消息:TypeError:无法读取未定义的属性“ByTeleLength”

我试图将“byteLength”值添加到我的对象(req.file)中,但同样的错误仍然存在

下面是我的实现

const firebase2 = require('firebase/app');
require('firebase/storage');


router.put('/addimage', multer.single('picture'), async (req, res, next) => {
   const newName = uuidv1() + "-" + req.file.originalname;
   var storageRef = firebase2.storage().ref('photo/'+ newName);
   storageRef.put(req.file);  
});

这个html示例是我做的。我想做一个后端,所以我要迁移到nodejs

<html>
<head>
    <meta charset="utf-8">
    <title>Teste</title>
    <style>
        body {
            display: flex;
            min-height: 100vh;
            width: 100%;
            padding: 0;
            margin: 0;
            align-items: center;
            justify-content: center;
            flex-direction: column;
        }
        #uploader {
            -webkit-appearance: none;
            appearance: none;
            width: 50%;
            margin-bottom: 10%;
        }
    </style>
</head>
<body>
    <progress value="0" max="100" id="uploader">0%</progress>
    <input type="file" value="upload" id="fileButton"></input>

    <script src="https://gstatic.com/firebasejs/live/3.0/firebase.js"></script>
    <script>
        // Your web app's Firebase configuration
        // For Firebase JS SDK v7.20.0 and later, measurementId is optional
        var firebaseConfig = {
          apiKey: "xxxxx",
          authDomain: "xxxxx",
          projectId: "xxxxx",
          storageBucket: "xxxxxxx",
          messagingSenderId: "xxxxxx",
          appId: "xxxxxxx",
          measurementId: "xxxxxx"
        };
        // Initialize Firebase
        firebase.initializeApp(firebaseConfig);

        var uploader = document.getElementById('uploader');
        var fileButton = document.getElementById('fileButton');

        fileButton.addEventListener('change', function(e){

            var file = e.target.files[0];

            var storageRef = firebase.storage().ref('sweet_fifs/'+ file.name);

            var task = storageRef.put(file);

            task.on('state_changed', 
                function progress(snapshot) {
                    var percetage = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
                    uploader.value = percetage;
                },
                function error(err) {

                }
            )

        });
        
      </script>
</body>

睾丸
身体{
显示器:flex;
最小高度:100vh;
宽度:100%;
填充:0;
保证金:0;
对齐项目:居中;
证明内容:中心;
弯曲方向:立柱;
}
#上传器{
-webkit外观:无;
外观:无;
宽度:50%;
利润底部:10%;
}
0%
//您的web应用程序的Firebase配置
//对于Firebase JS SDK v7.20.0及更高版本,measurementId是可选的
var firebaseConfig={
apiKey:“xxxxx”,
authDomain:“xxxxx”,
projectId:“xxxxx”,
storageBucket:“xxxxxxx”,
messagingSenderId:“xxxxxx”,
appId:“xxxxxxx”,
度量标准:“xxxxxx”
};
//初始化Firebase
firebase.initializeApp(firebaseConfig);
var uploader=document.getElementById('uploader');
var fileButton=document.getElementById('fileButton');
fileButton.addEventListener('change',函数(e){
var file=e.target.files[0];
var storageRef=firebase.storage().ref('sweet_fifs/'+file.name);
var task=storageRef.put(文件);
task.on('state_changed',
功能进度(快照){
var percetage=(snapshot.bytesttransfered/snapshot.totalBytes)*100;
uploader.value=percetage;
},
函数错误(err){
}
)
});
该方法需要一个
Blob | Uint8Array | ArrayBuffer
作为第一个参数。您提供的
req.file
对象不是这些。但是,我们可以看到有一个
缓冲区
对象作为
req.file
对象的属性可用,该缓冲区中的内容类型也是如此。因此,我们所需要做的就是取出这些值并将它们传递给
Reference\put()
。另外,不要忘记为用户创建响应并处理任何错误

router.put('/addimage', multer.single('picture'), async (req, res, next) => {
   const newName = uuidv1() + "-" + req.file.originalname;
   const storageRef = firebase2.storage().ref('photo/'+ newName);
   
   storageRef.put(req.file.buffer, {
     contentType: req.file.mimetype
   })
   .then(() => storageRef.getDownloadURL()) // after upload, obtain the download URL
   .then(
     (url) => {
       // persisted to storage successfully and obtained download URL
       res
         .status(201)
         .set("Content-Location", url) // use "Location" if you want to redirect to it
         .json({
           "message": "Upload successful"
         });
     },
     (err) => {
       // failed to save to storage
       logger.error({
         message: "Upload failed with error",
         errorMessage: err.message,
         errorStack: err.stack
       });

       res
         .status(500)
         .json({
           "message": "Upload failed",
           "error": err.code || "unknown"
         });
     }
   )
   .catch((err) => {
     // if here, something has gone wrong while sending back the response
     // likely a syntax error, or sending responses multiple times
     logger.error({
       message: "Unexpected rejection during /addImage",
       errorMessage: err.message,
       errorStack: err.stack
     });
   });
});

您的
路由器在哪里运行?在谷歌云功能、Firebase云功能或您自己的NodeJS安装中?我在Firebase上放置的图像我的应用程序在Heroku上。非常感谢您的帮助,我非常高兴。当尝试应用您评论的解决方案时,它生成了另一个错误,如下图所示。正在等待调试器断开连接。。。C:\workspace\Job4You\node_modules\@firebase\storage\dist\index.cjs.js:515 this.xhr\uxur=new-XMLHttpRequest();^ReferenceError:XMLHttpRequest未在新网络中定义是的,我忘了提到
firebase/storage
是SDK中仅用于浏览器的一部分。如果您想从节点访问云存储,您应该使用来访问。感谢您的帮助,我不明白,甚至不知道如何使用firebase admin,我会像您一样继续研究。@Sandro
firebase admin
firebase
SDK的一个版本,设计用于在服务器上而不是浏览器上运行。对于大多数调用,您使用它的方式与
firebase
相同-使用
import*作为管理员从“firebase admin”
导入时,只需将
firebase
交换为
admin
。看看这本书,非常感谢。你有上传这张图片的例子吗?我无法使用这个firebase管理员,也无法理解您是如何使用它的。请记住,我正在为我的大学做nodejs后端,我没有使用屏幕来获取文件,我是通过邮递员(rest)使用它的