我有一个Java应用程序,允许用户上传文档。上载的文档保存在网络上特定的“客户端文件”文件夹中,并记录在文档存储表中的SQL数据库中。向他们添加网络上的特定文件可以正常工作,但是当我单击以从浏览器中的应用程序下载(即查看)文件时,它返回404错误。网址是准确的,我不确定从哪里开始解决这个问题就可以了。任何想法,我应该考虑为什么它不起作用?显然,路径设置正确,因为我可以从应用程序下载到存储文件。只是不确定是什么阻止了它发回。可以在服务器端吗?
此外,不确定要查看此代码需要知道什么代码。这是下载按钮。
<td>
<span>
<span th:text="${doc.storage}"></span>
<a th:href="@{|/client-files/${client.principleName+' '+client.id+'/'+doc.storage}|}"><i class="fa fa-download"/></a>
</span>
</td>
看起来代码库没有用于查看方面的控制器。看来只是在附加链接,应该通过调用链接访问文件夹/文件?
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/client-files/**").addResourceLocations("file:client-files/");
registry.addResourceHandler("/client-files/**").addResourceLocations("file:carrier-files/");
}
@Controller
public class DocumentsController {
@Autowired
ClientRepository clientRepository;
@Autowired
LicenseRepository licenseRepository;
@Autowired
DocumentRepository documentRepository;
@Autowired
StorageService storageService;
@Autowired
DocumentService documentService;
@Autowired
InsuranceRepository insuranceRepository;
@Autowired
CarrierAppointmentRepository carrierAppointmentRepository;
@Autowired
RoleRepository roleRepository;
@RequestMapping(value="/documents/client/{id}")
public String manageDocuments(Model model, @PathVariable("id") Client client){
Document newDocument=new Document();
License newLicense=new License();
Insurance newInsurance=new Insurance();
model.addAttribute("insurances",insuranceRepository.findByClient(client));
model.addAttribute("newDocument",newDocument);
model.addAttribute("newLicense",newLicense);
model.addAttribute("newInsurance",newInsurance);
model.addAttribute("licenses",licenseRepository.findByClient(client));
model.addAttribute("docs",documentRepository.findByClient(client));
model.addAttribute("client",client);
return "documents";
}
@RequestMapping(value="/save/document")
public String addDoc(Model model, @ModelAttribute(value="newDocument") Document newDocument, @RequestParam("document") MultipartFile file){
Document doc=documentRepository.save(newDocument);
doc.setStorage(storageService.store(file,newDocument.getClient()));
documentRepository.save(doc);
documentService.markDocuments(newDocument.getClient(),newDocument.getType());
return "redirect:/documents/client/"+newDocument.getClient().getId();
}
@RequestMapping(value="/delete/doc/{id}")
public String deleteDoc(Model model, @PathVariable("id") Document doc, HttpServletResponse response) throws IOException {
if (doc.getClient()!=null) {
String type = doc.getType();
storageService.delete(doc.getStorage(),doc.getClient());
documentRepository.delete(doc);
documentService.markDocuments(doc.getClient(), type);
return "redirect:/documents/client/" + doc.getClient().getId();
}else{
String username= SecurityContextHolder.getContext().getAuthentication().getName();
Role role=roleRepository.findByUsernameContainingIgnoreCaseAndActive(username,true);
if (!role.getIsCarrierAdmin()){
return "redirect:/accessDenied";
}
storageService.delete(doc.getStorage(),doc.getCarrierAppointment());
documentRepository.delete(doc);
return "redirect:/carrierAppointment/details/" + doc.getCarrierAppointment().getId();
}
}
@RequestMapping(value="/save/insurance")
public String addInsuranceDoc(@ModelAttribute(value="newInsurance")Insurance newInsurance,@RequestParam("insurance-file") MultipartFile file){
Insurance insurance = insuranceRepository.save(newInsurance);
insurance.setProof(storageService.store(file,newInsurance.getClient()));
insuranceRepository.save(insurance);
documentService.markInsurance(newInsurance.getClient());
return "redirect:/documents/client/"+newInsurance.getClient().getId();
}
@RequestMapping(value="/delete/insurance/{id}")
public String deleteInsurance(Model model,@PathVariable("id")Insurance insurance){
storageService.delete(insurance.getProof(),insurance.getClient());
documentService.markInsurance(insurance.getClient());
insuranceRepository.delete(insurance);
return "redirect:/documents/client/"+insurance.getClient().getId();
}
}