【问题标题】:How can I upload a file multiple times?如何多次上传文件?
【发布时间】:2021-12-06 07:51:27
【问题描述】:

这是我的代码,我在这里接受 Excel 文件并读取它。之后我读取行值的 Excel 文件并将它们插入到数据库中,然后插入到相应的列中。最后,我把文件放在电脑上我确定好的文件夹里。但是我在这里遇到了一个问题,当我想在api中多次下载同名文件时,它表明我最初只是第一次将它上传到文件夹,但它会将值打印到数据库中。我无法对此做出任何逻辑,您认为我可以在这里做什么?

 @Override
    public ResponseEntity<? extends Response> acceptExcelFileAndSenderName(MultipartFile filePath, String senderName) throws IOException {
        String fileName = filePath.getOriginalFilename();
        if (fileName.substring(fileName.length() - 5).equals(".xlsx")) {
            try (InputStream excelFile = filePath.getInputStream()) {
                String phoneNumber = "";
                String textMessage = "";
                Workbook workbook = new XSSFWorkbook(excelFile);
                Sheet datatypeSheet = workbook.getSheetAt(0);
                Iterator<Row> iterator = datatypeSheet.iterator();
                while (iterator.hasNext()) {
                    Row currentRow = iterator.next();
                    Iterator<Cell> cellIterator = currentRow.iterator();

                    while (cellIterator.hasNext()) {

                        Cell currentCell = cellIterator.next();
                        if (currentCell.getCellType() == CellType.NUMERIC) {
                            phoneNumber = NumberToTextConverter.toText(currentCell.getNumericCellValue());
                        } else if (currentCell.getCellType() == CellType.STRING) {
                            textMessage = String.valueOf(currentCell.getStringCellValue());
                        }

                    }
                    FileDetail fileDetail = new FileDetail();
                    fileDetail.setPhoneNumber(phoneNumber);
                    fileDetail.setTextMessage(textMessage);
                    fileDetail.setSender(senderName);
                    this.fileDetailRepository.save(fileDetail);
                }
                excelFile.close();

                String destination = "C:\\Users\\anar.memmedov\\Desktop\\app\\" + filePath.getOriginalFilename();
                File file1 = new File(destination);
                filePath.transferTo(file1);
                return new ResponseEntity<>(new SuccessResponse(MessageCase.FILE_SUCCESSFULLY_WRITTEN_TO_DATABASE.getMessage(), 200), HttpStatus.OK);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return new ResponseEntity<>(new ErrorResponse(MessageCase.FAILED_HAPPEND_WHEN_FILE_WRITTEN_TO_DATABASE.getMessage(), 400), HttpStatus.BAD_REQUEST);
    }

【问题讨论】:

    标签: java excel file upload


    【解决方案1】:

    我改变了一些东西并工作了,它看起来像这样

    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss");
        
                        String destination = "C:\\Users\\anar.memmedov\\Desktop\\app\\" + "_" + LocalDateTime.now().format(dateTimeFormatter) + "_" + filePath.getOriginalFilename();
    

    【讨论】:

      【解决方案2】:

      尝试为每个文件创建一个唯一的文件名,例如:

      String destination = "C:\\Users\\anar.memmedov\\Desktop\\app\\" + System.nanoTime()+"_"+filePath.getOriginalFilename();
      

      【讨论】:

      • 很好的答案,非常感谢!
      • 它有效,但我想要的是当前日期而不是随机数 - 我的文件名为 - _ 例如当我上传文件时,我希望它看起来像这样 10.19.2021-4 :19 PM-文件名_
      • 然后把System.nanoTime()换成new Date()
      • 我收到错误 java.io.FileNotFoundException: C:\Users\anar.memmedov\Desktop\app_Tue Oct 19 16:35:26 AZT 2021_test.xlsx(文件名、目录名或卷标签语法不正确)
      • Windows 不允许在文件名中使用冒号 (:)。我建议你恢复到System.nanoTime()。这只是当前日期的数字表示,它不是随机数
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2011-05-28
      相关资源
      最近更新 更多