как загрузить файл, как PDF или документ в FireStore - PullRequest
0 голосов
/ 31 января 2019

Я хочу загружать файлы документов в FireStore с использованием приставки.я получил файл и передал его в виде состояния в файл действия с другими данными.Ниже приведен мой код в файле действий.

const createJob = (project) => {
return (dispatch, getState, {getFirebase, getFirestore}) => {
    const firestore = getFirestore();

    firestore.collection('Jobs').add({
        ...project,
        postedby:'Employer1',
        Documents:project.Documents.name
    }).then(()=>{
        dispatch({type:'CREATE_JOB', project});
    }).catch((err)=>{
        dispatch({type:'CREATE_JOB_ERROR', err});
    })
}
};

, но данные сохраняются как C: \ fakepath \ doc1.doc

как загрузить фактический файл в firestore

1 Ответ

0 голосов
/ 31 января 2019

Привет. Вы не можете напрямую сохранить изображение в firestore. Что нужно сделать, это сначала сохранить документ в хранилище firebase и получить URL-адрес в качестве ответа. Как только ответ получен, добавьте URL-адрес в документы.

Сначала создайте Действие хранилища в Redu:

import { storage } from '../../../firebase/firebase';
import {
  ADD_DOCUMENT_STARTED,
  ADD_DOCUMENT_COMPLETED,
  ADD_DOCUMENT_ERROR
} from '../../actionTypes/storageActionTypes';
import { toast } from 'react-toastify';
import constants from '../../../config/constants';

export const addDocumentStart = () => ({
  type: ADD_DOCUMENT_STARTED
});
export const addDocumentSuccess = () => ({
  type: ADD_DOCUMENT_COMPLETED
});
export const addDocumentFailure = () => ({
  type: ADD_DOCUMENT_ERROR
});

export const addDocument = (values, pathName) => {
  const toastId = toast('Uploading Attachment, Please wait..', {
    autoClose: false
  });
  return (dispatch) =>
    new Promise(function(resolve, reject) {
      dispatch(addDocumentStart());
      const timeStamp = new Date().getTime();
      const image = values.document[0];
      var name;
      if (values && values.documentName) {
        name = timeStamp.toString().concat(values.documentName);
      } else {
        name = timeStamp.toString().concat(image.name);
      }
      const imageUpload = storage.ref(`${pathName}/${name}`).put(image);
      imageUpload.on(
        'state_changed',
        (snapshot) => {
          switch (snapshot.state) {
            case 'paused':
              reject('Upload is paused');
              dispatch(addDocumentFailure('Upload is paused'));
              break;
          }
        },
        (error) => {
          switch (error.code) {
            case 'storage/unauthorized':
              reject('Permission Denied');
              dispatch(addDocumentFailure('Permission Denied'));
              break;
            case 'storage/canceled':
              reject('Upload Cancelled');
              dispatch(addDocumentFailure('Upload Cancelled'));
              break;
            case 'storage/unknown':
              reject('Server Response Error');
              dispatch(addDocumentFailure('Server Response Error'));
              break;
          }
        },
        () => {
          toast.update(toastId, {
            render: 'Attachment Uploaded successfully',
            type: toast.TYPE.SUCCESS,
            autoClose: constants.toastTimer
          });
          storage
            .ref(pathName)
            .child(name)
            .getDownloadURL()
            .then((url) => {
              dispatch(addDocumentSuccess());
              resolve(url);
            });
        }
      );
    });
};

Затем в своей отправке:

 this.props.dispatch(addDocument(values, 'Jobs')).then((resp) => {
  let documentUrl = resp;
  firestore.collection('Jobs').add({
          ...project,
          postedby:'Employer1',
          Documents:documentUrl
      }).then(()=>{
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...