我正在开发一个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上更好地提问,这样您就更容易理解我的问题了。
在您的头中,尝试传递安全令牌或凭据,如下所示:
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