从存储中检索文档时出现问题-休眠,springboot,java,sql应用程序

时间:2018-11-07 01:01:33

标签: java hibernate spring-boot thymeleaf storage

我有一个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();
    }
}

0 个答案:

没有答案