Как отправить выбранные файлы на сервер узла, используя реагировать нативные фс? - PullRequest
0 голосов
/ 04 марта 2020

Я использую https://github.com/itinance/react-native-fs для загрузки файлов с собственного клиента, но на моем nodejs сервере его не получают. Между прочим, для выбора файлов из файловой системы Android я использовал response-native-document-picker https://github.com/Elyx0/react-native-document-picker. Вот код моего клиентского приложения:

async uploadToNode() {
let testUrl = this.state.multipleFile[0].uri; //content://com.android.providers.media.documents/document/image%3A7380
const split = testUrl.split('/');
const name = split.pop();
const setFileName = "Img"
const inbox = split.pop();
const realPath = `${RNFS.TemporaryDirectoryPath}${inbox}/${name}`;
const uploadUrl = "http://localhost:8082/uploadToIpfs";

var uploadBegin = (response) => {
  const jobId = response.jobId;
  console.log('UPLOAD HAS BEGUN! JobId: ' + jobId);
};

var uploadProgress = (response) => {
  const percentage = Math.floor((response.totalBytesSent/response.totalBytesExpectedToSend) * 100);
  console.log('UPLOAD IS ' + percentage + '% DONE!');
};



RNFS.uploadFiles({
  toUrl: uploadUrl,
  files: [{
     name: setFileName,
     filename:name,
     filepath: realPath,
   }],
  method: 'POST',
  headers: {
     'Accept': 'application/json',
  },
  begin: uploadBegin,
  beginCallback: uploadBegin, // Don't ask me, only way I made it work as of 1.5.1
  progressCallback: uploadProgress,
  progress: uploadProgress
  })
  .then((response) => {
    console.log(response,"<<< Response");
    if (response.statusCode == 200) { //You might not be getting a statusCode at all. Check
       console.log('FILES UPLOADED!');
     } else {
       console.log('SERVER ERROR');
      }
    })
    .catch((err) => {
      if (err.description) {
        switch (err.description) {
          case "cancelled":
            console.log("Upload cancelled");
            break;
          case "empty":
            console.log("Empty file");
          default:
           //Unknown
        }
      } else {
       //Weird
      }
      console.log(err);
   });
}

Я не уверен, что код nodejs правильный для получения файлов из клиентского приложения. И вот мой код сервера;

app.post('/uploadToIpfs', (req, res) => {
    // network.changeCarOwner(req.body.key, req.body.newOwner)
    //     .then((response) => {
    //         res.send(response);
    //     });
    // var fileName = "Img";
    // if(req.name == fileName){
    //     console.log(req.filename);
    //     res.send("Passed")
    // }else{
    //     res.send("failed")
    // }
    console.log(req.files[0].filename);
    res.send("Passed")
});

app.listen(process.env.PORT || 8082);
...