я получаю сообщение об ошибке «Firebase Storage: недопустимое количество аргументов в` put`: ожидается от 1 до 2 аргументов, получено 0 - PullRequest
1 голос
/ 02 августа 2020

Когда я нажимаю кнопку загрузки, firebase выдает ошибку ниже:

Uncaught FirebaseStorageError {code_: "storage / invalid-argument-count", message_: "Firebase Storage: недопустимое количество аргументов в put: ожидается от 1 до 2 аргументов, получено 0. ", serverResponse_: null, name_:" FirebaseError "}

function ImageUpload(username) {
    const [caption, setCaption] = useState('');

    const [image, setImage] = useState(null);
    // const [url, setUrl] = useState("");
    const [progress, setProgress] = useState(0);

    const handleChange =  (e) => {
        if(e.target.files[0]){
            setImage(e.target.files[0]); // setting current image
        } 
    };

    const handleUpload = () => {
        const uploadTask = firebase.storage().ref(`images/${image.name}`).put();

        uploadTask.on(
            "state_changed",
            (snapshot) => {
                // progress bar
                const progress = Math.round(
                    (snapshot.bytesTransferred / snapshot.totalBytes) * 100
                );
                setProgress(progress);
            },
            (error) => {
                // err function
                console.log(error); 
                alert(error.message);
            },
            () => {
                storage
                .ref("images")
                .child(image.name)
                .getDownloadURL()
                .then(url => {
                    //upload img inside DB
                    db.collection("posts").add({
                        timestamp : firebase.firestore.FieldValue.serverTimestamp(),
                        caption : caption ,
                        imageUrl : url ,
                        username : username
                    });

                    setProgress(0);
                    setCaption('');
                    setImage(null);
                });
            }
        )
    }

    return (
        <div>

            <progress value={progress} max="100" />

            <input type="text" placeholder='enter a caption...' 
                onChange={event => setCaption(event.target.value)} value={caption} 
            />

            <input type="file" onChange={handleChange} />

            <Button className="imageUpload__button" onClick={handleUpload}>
                Upload
            </Button>
        </div>
    )
}

export default ImageUpload

1 Ответ

1 голос
/ 02 августа 2020

Согласно документам:

put

put (данные: Blob | Uint8Array | ArrayBuffer, метаданные?: UploadMetadata): UploadTask Uploads данные к расположению этой ссылки.

Данные параметров: Blob | Uint8Array | ArrayBuffer Данные для загрузки.

Дополнительные метаданные: UploadMetadata Метаданные для только что загруженного объекта.

Возвращает UploadTask

Например:

var file = ... // use the Blob or File API
ref.put(file).then(function(snapshot) {
  console.log('Uploaded a blob or file!');
});

https://firebase.google.com/docs/storage/web/upload-files

https://firebase.google.com/docs/reference/js/firebase.storage.Reference#put

Следовательно, внутри put() метод, который вы используете, вам необходимо использовать File или Blob

...