Получить файл с удаленного компьютера

106
06 декабря 2019, 13:00

Подскажите, пожалуйста, советом.

Есть приложение, установленное на машине, машина расшариная, то есть в другой машины в данной сети можно запустить приложение по ip-адресу.

У меня на главной странице есть форма, куда необходимо передать excel файл. Но загвоздка во в чем, когда на стороне java я обрабатываю файл, естественно он просит, чтобы файл был в том каталоге откуда запускается приложение, то есть абсолютный путь, он как раз есть рабочая машина, на которой установлен томкат, и откуда он запущен. Если файл положить в каталог томката/bin, то все работает прекрасно, стоит загрузить файл например с рабоче стола, то он ругается, что файл не найден, а уж с удаленной машине и подавно не загрузить.

Пожалуйста, дайте совет, как это можно реализовать, я пытался подменять через JS путь на c:\fakepath\имя файла, но это не сработало, на macOS тем более.

Сам файл загружаю при помощи AJAX и далее к контроллере просто принимаю его как тип File. и уже передаю в метод, где его разбираю.

Файл js

function calcGroupRate() {
var file = checkEmpty($('input[name="ratesGroupFile"]')
  .val().split("\\").pop());
  $.ajax({
    url: "rate/group",
    datatype: "json",
    type: "post",
    contentType: "application/json",
    data: JSON.stringify({ file: file })
  });
 }

Контроллер java

@PostMapping(value = "/group")
public ResponseEntity<Object> totalGroupModel(@RequestBody CalcGroupRateBody object) {
    logger.info(object.getFile().getPath());
    logger.info(object.getFile().getAbsolutePath());
    logger.info(object.getFile().getName());
    groupCalculateRate.fetchGroupModels(object.getFile());
    return new ResponseEntity<>(groupCalculateRate.getListError(), HttpStatus.OK);
}

Далее файл передаю в другой класс где разбираю Эксель

public List<GroupListBasicDate> getGroupListBasicDateFromFile(File file) {
    try {
        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(file);
Answer 1

Решил вопрос небольшим хаком. Путем пересоздания файла в темповой папке томката и уже его забирать. Можно сказать, как подсказал @StrangerintheQ.

private static File convertToFile;
public static File multipartToFile(MultipartFile file) {
    try {
        convertToFile = new File(System.getProperty("java.io.tmpdir"), file.getOriginalFilename());
        convertToFile.createNewFile();
        try(FileOutputStream fileOutputStream = new FileOutputStream(convertToFile)) {
            fileOutputStream.write(file.getBytes());
        }
    } catch (IOException e) {
        logger.error("Ошибка конвертации файла - {}", e.getMessage());
    }
    return convertToFile;
}
READ ALSO
Хранилище для графа

Хранилище для графа

Мне необходимо хранить, обновлять и отдавать по запросу некоторые элементы графаПод графом в данном случае я подразумеваю его представление...

144
Когда используется iterator не в цикле foreach?

Когда используется iterator не в цикле foreach?

Бывают ли такие случаи, когда нужно прописывать и работать напрямую с итератором а не в foreach?

118
В файле медиа запросов не работает адаптация для смартфона

В файле медиа запросов не работает адаптация для смартфона

В одном и том же файле делают медиа запрос для:

142
Помогите разобраться с индексацией массива в javascript

Помогите разобраться с индексацией массива в javascript

Здравствуйте! Помогите, пожалуйста, разобраться с индексацией массива arr в следующем примере (учебное упражнение, реализующее рулетку):

137