Используйте Filepond для реакции и для загрузки файлов и отправки токена, используя ax ios? - PullRequest
0 голосов
/ 30 апреля 2020

Я новичок в топоре ios и реагирую. Я использую библиотеку FilePond для загрузки. Я хочу отправить токен с топором ios для этой загрузки, но он не работает ... У вас есть идея, потому что я использую axios.create({ в processFile функции, а в другом обсуждении я видел только axios({headers но мне нужно использовать interceptors.request.use((config) для отправки токена ... Большое спасибо :)

   function processFile(fieldName, file, metadata, load, error, progress, abort) {
        // FormData is a Web API that creates a HTML <form> element.
        // set data
        const formData = new FormData();
        console.log('dans le processFile');
        formData.append('file', file, file.name);

        // related to aborting the request
        const CancelToken = axios.CancelToken
        const source = CancelToken.source();

        // the request itself
        //axios({
        const APIUploadPdf=axios.create({
          headers: {
            'Accept': 'application/json;charset=UTF-8',
            'content-type': 'application/x-www-form-urlencoded'
           },
          method: 'post',
          url: Config.pdfServer,
          data: formData,
          cancelToken: source.token,
          onUploadProgress: (e) => {
            // updating progress indicator
            progress(e.lengthComputable, e.loaded, e.total);
          }
        }).then(response => {
          // passing the file id to Filepond
          load(response.data.data.id)
        }).catch((thrown) => {
          if (axios.isCancel(thrown)) {
            console.log('Request cancelled', thrown.message);
          } else {
            // handle error
          }
        }); 
        // send a token
        APIUploadPdf.interceptors.request.use((config) => {
        return new Promise((resolve, reject) => {
        if(Config.token) {
            this.token = Config.token;
            Config.token = null;
        }
        var timeNow = new Date().getTime();

        if (this.token.access_token) {

            const accessTokenExp = jsrsasign.KJUR.jws.JWS.parse(this.token.access_token);
            //check token
            var accessTokenLifeTime = new Date(accessTokenExp.payloadObj.exp * 1000).getTime();
            if ( accessTokenLifeTime > timeNow) {
                config.headers.common['Authorization'] = `${this.token.access_token}`;
                resolve(config);
            }
            else {
                var refreshTokenExp = jsrsasign.KJUR.jws.JWS.parse(this.token.refresh_token);
                var timeExpRefresh = new Date(refreshTokenExp.payloadObj.exp * 1000).getTime();
                var accessTokenTimeExpire = accessTokenLifeTime - 600000;

                //ask a new refreshToken
                if ((timeNow <= timeExpRefresh && accessTokenLifeTime < timeNow)|| (accessTokenTimeExpire <= timeNow &&  timeNow <= accessTokenLifeTime)) {
                    this.getTokens(this.token.refresh_token, config, resolve, reject);
                } else if(timeNow >= timeExpRefresh){
                    console.log('not available anymore');
                }
            }
        } else {
             alert('action impossible');
        }
    }, error => Promise.reject(error));
}, function (error) {
    console.log(error);
    return Promise.reject(error);
});
    }

{<div className={"div-file-component"} style={!Config.isAdmin ? {marginTop: 2 + '%'} : {}}>
                {

                    <FilePond
                        server={{
                            process:(fieldName, file, metadata, load, error, progress, abort) => {
                            processFile(fieldName, file, metadata, load, error, progress, abort);
                            } 
                        }}
                        //server={{process: Config.pdfServer }}
                        oninit={() => handleInit()}
                         onupdatefiles={(fileItems) => {
                        // Set current file objects to this.state
                             setFile(fileItems.map(fileItem => fileItem.file));
                        }}
                        instantUpload={false}
                        onprocessfile={(error, file)=>{
                            console.log('PROCESSED', file, 'SERVER_ID', file.serverId);
                            console.log('ERROR PROCESSED', error);
                        }}
                    />
                }
...