Добавить метаданные в файлы, загруженные с Axios. реагировать - PullRequest
0 голосов
/ 07 января 2019

Я могу загружать документы с помощью Axios, но не могу добавить какие-либо метаданные в загружаемый файл. Я сохраняю файл в своей БД, и мне нужно сохранить его с данными из моей формы, такими как DocumentTypeID и т. Д. Вот мой код:

Моя страница реакции, событие, когда файл выбран:

  fileUpload(event) {
    const { dispatch } = this.props;
    var documentDetails = {
      matterID: 1,
      documentTypeID: 1
    }

dispatch(documentActions.add(documentDetails, event));

}

Мое действие:

function add(documentDetails, file) {
  let data = new FormData();
  let filetoUpload = file.target.files[0];
  data.append('file', filetoUpload);

  return dispatch => {
    dispatch(request());
axios.post('/api/document/add', data, {
  headers: {
    'Content-Type': 'multipart/form-data',
    'Metadata': JSON.stringify(documentDetails)
  },
})
    .then(
  dispatch(success(function () )),
  error => dispatch(failure())
    );

};

В приведенном выше примере я не могу отправить объект documentDetails на мой контроллер API. Я могу отправить файл, только когда я попробую что-нибудь еще, значения, отправленные в API, будут нулевыми.

Мой контроллер API, который работает, когда я только отправляю файл:

[HttpPost("add")]
        public void Add(IFormFile file)
        {
            if (file != null)
            {
                DocumentViewModel documentViewModel = new DocumentViewModel();
                Document document = new Document();

            byte[] p1 = null;
            using (var fs1 = file.OpenReadStream())
            using (var ms1 = new MemoryStream())
            {
                fs1.CopyTo(ms1);
                p1 = ms1.ToArray();
            }

            document = documentViewModel.ToDocumentEntity();
            document.DocumentType = 1;
            document.FileName = "test.txt";
            document.Name = "testing";
            document.MatterID = 1;
            document.DateUploaded = DateTime.Now;
            document.IsDeleted = false;

            using (LiquidationEntities db = new LiquidationEntities())
            {
                DocumentRepository documentRepo = new DocumentRepository();
                documentRepo.Add(db, document);
            }
        }

        var response = new
        {

        };

    }

Когда я пытаюсь отправить файл и объект, который является моделью представления, оба равны нулю:

[HttpPost("add")]
        public void Add([FromBody]DocumentViewModel documentViewModel, IFormFile file)
        {
            Document document = new Document();

        byte[] p1 = null;
        using (var fs1 = documentViewModel.FormFile.OpenReadStream())
        using (var ms1 = new MemoryStream())
        {
            fs1.CopyTo(ms1);
            p1 = ms1.ToArray();
        }

        document = documentViewModel.ToDocumentEntity();
        document.DocumentType = 1;
        document.FileName = "test.txt";
        document.Name = "testing";
        document.MatterID = 1;
        document.DateUploaded = DateTime.Now;
        document.IsDeleted = false;

        using (LiquidationEntities db = new LiquidationEntities())
        {
            DocumentRepository documentRepo = new DocumentRepository();
            documentRepo.Add(db, document);
        }

        var response = new
        {

        };

    }

Как видите, я тяжело кодирую детали документа. Как я могу отправить эту информацию вместе с загружаемым файлом? Я пытался добавить его в заголовки, но это не сработало. Я попытался использовать свой сервис вместо вызова Axios из моего действия, и это тоже не сработало, вот этот сервис:

function add(documentDetails, file) {
  debugger;
  let data = new FormData();
  let filetoUpload = file.target.files[0];

  const requestOptions = {
    method: 'POST',
    headers: { 'Content-Type': 'application/json'},
    body: { 'documentViewModel': documentDetails, 'file': file }
  };

  var result = fetch(`${process.env.REACT_APP_API_URL}/api/document/add`, requestOptions).then(handleResponse);
  return result;
}

Когда я пытаюсь отправить и мою модель представления, и файл, это также не удается. Когда я отправляю только файл, он работает.

Пожалуйста, кто-нибудь может помочь, и дайте мне знать, как я могу добавить метаданные в мой файл ...

...