首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图将图像上载到Firebase存储区时出错

试图将图像上载到Firebase存储区时出错
EN

Stack Overflow用户
提问于 2020-09-01 19:41:41
回答 1查看 587关注 0票数 0

我正在尝试创建一个应用程序,允许用户上传一个图像,并在页面中显示它与React和Firebase。

这是代码中负责此问题的部分:图像变量来自于状态。

代码语言:javascript
复制
const [image, setImage] = useState("");
const [caption, setCaption] = useState("");
const [progress, setProgress] = useState(0)

function handleChange (e){
    if  (e.target.files[0]){
        setImage(e.target.files[0]);
    }
}
function handleUpload(){
    const uploadTask =  storage.ref('images/${image.name}').put(image)
    uploadTask.on(
        "state_changed",
        (snapshot) => {
            const progress = Math.round(
            (snapshot.bytesTransferred / snapshot.totalBytes) *  100
             );
            setProgress(progress);

           },
           (error) => {
            console.log(error);
            alert(error.message);
            },
            () => {
                storage
                .ref("images")
                .child(image.name)
                .getDownloadURL()
                .then(url => {
                    db.collection("posts").add({
                        timestamp: db.FieldValue.serverTimestamp(),
                        caption : caption,
                        imgUrl: url,
                        userName: username
                    })
                            setProgress(0);
                            setCaption("");
                            setImage(null);
                })
            }

        )
  
}

然后将此错误记录在控制台中:

代码语言:javascript
复制
Uncaught 

FirebaseStorageError {code_: "storage/invalid-argument", message_: "Firebase Storage: Invalid argument in `put` at index 0: Expected Blob or File.", serverResponse_: null, name_: "FirebaseError"}code_: "storage/invalid-argument"message_: "Firebase Storage: Invalid argument in `put` at index 0: Expected Blob or File."name_: "FirebaseError"serverResponse_: nullcode: (...)message: (...)name: (...)serverResponse: (...)__proto__: Object
    rethrowCaughtError @ react-dom.development.js:328
    runEventsInBatch @ react-dom.development.js:3336
    runExtractedPluginEventsInBatch @ react-dom.development.js:3537
    handleTopLevel @ react-dom.development.js:3581
    batchedEventUpdates$1 @ react-dom.development.js:21729
    batchedEventUpdates @ react-dom.development.js:798
    dispatchEventForLegacyPluginEventSystem @ react-dom.development.js:3591
    attemptToDispatchEvent @ react-dom.development.js:4311
    dispatchEvent @ react-dom.development.js:4232
    unstable_runWithPriority @ scheduler.development.js:659
    runWithPriority$1 @ react-dom.development.js:11077
    discreteUpdates$1 @ react-dom.development.js:21746
    discreteUpdates @ react-dom.development.js:811
    dispatchDiscreteEvent @ react-dom.development.js:4211

我曾试图将put(image)更改为put(blob),但没有奏效。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-03 21:55:51

  1. 这句话:
代码语言:javascript
复制
const uploadTask =  storage.ref('images/${image.name}').put(image)

出现错误时,应该使用符号` (反向引号/回勾号),而不是使用单引号'

代码语言:javascript
复制
const uploadTask =  storage.ref(`images/${image.name}`).put(image)

否则,您将创建一个对文字字符串images/${image.name}的引用,而不是image/value_of_variable_image.jpg,更多关于模板文字的内容可以找到这里

  1. 您还没有向我们展示image变量的内容,我可以从代码中看到,在一个函数中调用一个setState,这个函数看起来是一个回调函数,但是我没有看到您从哪里调用,您可以通过这样的输入来实现:
代码语言:javascript
复制
<input type="file" onChange={handleChange} />

如果您已经这样使用它,我建议在函数之外添加console.log(image),以便在将变量发送到put()之前调试变量的内容。正如引用一样,console.log(image)的输出应该是File javascript的一个实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63694393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档