У меня есть Java-приложение, которое позволяет пользователям загружать документы. Загруженные документы сохраняются в сети в определенной папке «клиентские файлы» и регистрируются в базе данных SQL в таблице хранения документов. Добавление к ним конкретного файла в сети работает точно, но когда я нажимаю, чтобы загрузить (он же просмотр) файл из приложения в браузере, он возвращает ошибку 404. URL-адрес является точным, и я не уверен, с чего начать с устранения проблемы. Любая идея, что я должен смотреть на то, почему это не работает? Ясно, что пути настроены правильно, так как я могу загрузить из приложения в файл хранилища. Просто не уверен, что мешает отправить его обратно. Это может быть что-то на стороне сервера?
Кроме того, не уверен, какой код вам нужно знать, чтобы посмотреть на это. Это кнопка загрузки ....
<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();
}
}