当前位置: 首页 > 知识库问答 >
问题:

我如何上传一个有spring boot和邮差的excel文件到一个MySQL数据库?-状态:401未授权

龙隐水
2023-03-14

我正在开发一个RESTful FAQ WebService。所以我决定为excel文件实现一个导入/下载特性。目前我更多地关注于上传功能。因此,为了实现这个特性,我学习了一个教程(https://bezkoder.com/spring-boot-upload-excel-file-database/),因为我是spring boot或编程方面的新手。

所以现在,如果我想上传我的示例Excel文件,实际上没有来自邮递员的回应。你可以在下图中看到。邮递员也说:401未经授权。这是什么意思?我该如何修复?

ExcelController:

@Controller
@RequestMapping("/api/excel")
public class ExcelController {

  @Autowired
  ExcelService fileService;

  @PostMapping("/upload")
  public ResponseEntity<ResponseMessage> uploadFile(@RequestParam("file") MultipartFile file) {
    String message = "";

    if (ExcelHelper.hasExcelFormat(file)) {
      try {
        fileService.save(file);

        message = "Uploaded the file successfully: " + file.getOriginalFilename();
        return ResponseEntity.status(HttpStatus.OK).body(new ResponseMessage(message));
      } catch (Exception e) {
        message = "Could not upload the file: " + file.getOriginalFilename() + "!";
        return ResponseEntity.status(HttpStatus.EXPECTATION_FAILED).body(new ResponseMessage(message));
      }
    }

    message = "Please upload an excel file!";
    return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseMessage(message));
  }

  @GetMapping("/tutorials")
  public ResponseEntity<List<Tutorial>> getAllTutorials() {
    try {
      List<Tutorial> tutorials = fileService.getAllTutorials();

      if (tutorials.isEmpty()) {
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
      }

      return new ResponseEntity<>(tutorials, HttpStatus.OK);
    } catch (Exception e) {
      return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
    }
  }

  @GetMapping("/download")
  public ResponseEntity<Resource> getFile() {
    String filename = "tutorials.xlsx";
    InputStreamResource file = new InputStreamResource(fileService.load());

    return ResponseEntity.ok()
        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + filename)
        .contentType(MediaType.parseMediaType("application/vnd.ms-excel"))
        .body(file);
  }

}

同样,我使用spring安全,所以用户需要登录才能看到网站。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    public UserDetailsService userDetailsService() {
        return new UserDetailsServiceImpl();
    }

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public DaoAuthenticationProvider authenticationProvider() {
        DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
        authProvider.setUserDetailsService(userDetailsService());
        authProvider.setPasswordEncoder(passwordEncoder());

        return authProvider;
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(authenticationProvider());
    }

//    @Override
//    protected void configure(HttpSecurity http) throws Exception {
//        http.authorizeRequests()
//                .anyRequest().authenticated()
//                .and()
//                .formLogin().permitAll()
//                .and()
//                .logout().permitAll();
//    }
    
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/api/v1/signup");
    }
}
//    protected void configure(HttpSecurity http) throws Exception {
//        http.authorizeRequests()
//                .anyRequest().authenticated()
//                .and()
//                .formLogin().permitAll()
//                .and()
//                .logout().permitAll();
//    }

我把它注释掉了,所以我不总是得到Postman中的登录页面,而得到实际的页面。

应用程序.属性:

spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/db_faq4?useSSL=false
spring.datasource.username = root
spring.datasource.password =
spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQL5InnoDBDialect

spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=5MB
spring.servlet.multipart.max-request-size=10MB
spring.mvc.dispatch-options-request=true

所以如果你需要更多的信息就说你需要什么。您也可以在github上找到整个源代码。(https://github.com/bezkoder/spring-boot-upload-excel-files)

正如我所说,我是编程的初学者。所以请随意说出我的问题在哪里,我如何改进它们和我自己,以及我如何在stackoverflow上更好地提问,这样您就更容易理解我的问题了。

共有1个答案

鲁滨海
2023-03-14

在您的头中,尝试传递安全令牌或凭据,如下所示:

Headers.SetBasicAuth(“admin”,“admin”);

一个接一个地尝试一下。应该管用。

 类似资料:
  • 问题内容: 我想允许John mysql用户使用LOAD DATA命令。所以我以root用户身份登录mysql终端并发出以下语句: 但我收到以下错误: 如果将替换为,则一切正常。但这并不意味着所有数据库吗?我想将john mysql用户限制为johndatabase。 问题答案: 您不能仅在单个数据库上授予FILE特权。从逻辑上讲这没有任何意义。考虑一下文档怎么说: FILE特权授予您使用LOAD

  • 问题内容: 我需要将表从一个数据库复制到另一个数据库。这将是一个cronjob。哪一种是最好的方法?PHP脚本或Shell脚本。PHP的问题是,两个数据库都有不同的用户名和密码,所以我不能这样做。 我应该只连接第一个DB以获得所有记录,然后使用WHILE循环将所有记录插入新数据库,还是有更好的方法? 我更喜欢用shell脚本代替PHP脚本来执行此操作。 谢谢 问题答案: 我把它丢了。比任何基于PH

  • 如何用Java将一个Excel的文件的数据读取到另一个Excel中? 我有两个excel文件,希望将A文件中的数据合并在B文件中。有没有推荐的方案

  • 如何连接MySQL数据库中的某个表? 我曾经尝试过: 但这给了我一个错误:- 但是我已经创建了一个名为的表。是否有任何PHP代码连接到我的表在同一个数据库中,有多个数据库? 创建多个数据库是否足够明智 完整代码:

  • 我想将文件上载到ftps服务器。下面的代码适用于10KB这样的小文件。但我需要上传5-10 MB的文件。错误出现在下面的错误行中。有人能帮我吗?下面是我尝试的代码。有没有更好的方法? 错误行 代码 错误消息 org.apache.commons.net.io.CopyStreamException: IOException在复制时捕获。在org.apache.commons.net.io.Util

  • 问题内容: 我有两个组件SideNav和Dashboard(两个位于不同的js文件中)。SideNav将具有选择框作为过滤器。我必须将一个数组从仪表板组件传递到补充工具栏组件。该数组必须作为选择框的值(在sidenav组件内部)给出。 PS: 如果在两个不同的JS文件中定义了两个不同的组件类,情况将会怎样。例如HomeComponent / Home.js->父组件Dashboard / Dash