2017-09-05 2 views
0

Jersey를 사용하여 파일과 양식 데이터를 나머지 서비스에 업로드하는 spring mvc를 사용하여 나머지 클라이언트를 개발했습니다.임시 파일 삭제

나머지 클라이언트의 Tomcat 홈 디렉토리에 내가 업로드 한 파일을 볼 수 있습니다.

성공 응답을받은 후 내 바람둥이에 저장된 파일을 자동으로 삭제할 수 있습니까?

참조 내 구성의 일부

,

"web.xml에"

<multipart-config> 
     <location>/tmp</location> 
     <max-file-size>26214400</max-file-size> 
     <max-request-size>31457280</max-request-size> 
     <file-size-threshold>0</file-size-threshold> 
    </multipart-config> 

"디스패처-servlet.xml 파일"의 다중 설정

<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/> 

내 사업에

여러 부분 설정 논리,

public Map<Object, Object> upload(ModelMap model) { 
     Map<Object, Object> responseMap = new HashMap<>(); 
     sendMailBean = (SendMailBean) model.get("sendMailBean"); 

     FormDataMultiPart formDataMultiPart = new FormDataMultiPart(); 
     formDataMultiPart.field("firstName", sendMailBean.getFirstname()); 
     formDataMultiPart.field("lastName", sendMailBean.getLastname()); 
     formDataMultiPart.field("fromAddress", sendMailBean.getEmail()); 
     formDataMultiPart.field("subject", sendMailBean.getSubject()); 
     formDataMultiPart.field("text", sendMailBean.getMessage()); 
     List<MultipartFile> files = sendMailBean.getAttachments(); 
     try { 
      for(MultipartFile file : files) { 
       File convFile = convert(file); 
       FileDataBodyPart filePart = new FileDataBodyPart("files", convFile); 
       filePart.setContentDisposition(FormDataContentDisposition.name("files").fileName(file.getOriginalFilename()).build()); 
       formDataMultiPart.bodyPart(filePart); 
      } 
      Client client = new Client();  
      WebResource webResource = client.resource(----rest url-----); 
      ClientResponse response = webResource.type(MediaType.MULTIPART_FORM_DATA).post(ClientResponse.class, formDataMultiPart); 


      if (response.getStatus() != 200) { 
       model.addAttribute("errormsg", "Failed : HTTP error code : " + response.getStatus()); 
       responseMap.put("model", model); 
       responseMap.put("redirectToPage", "redirect:/views/error"); 
      } else { 
       //   responseMap.put("redirectToPage", "/views/email"); 

       responseMap.put("model", model); 
       responseMap.put("redirectToPage", ""); 
      } 
     }catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return responseMap; 
    } 

    public File convert(MultipartFile file) 
    {  
     File convFile = new File(file.getOriginalFilename()); 
     try { 
      convFile.createNewFile(); 
      FileOutputStream fos = new FileOutputStream(convFile); 
      fos.write(file.getBytes()); 
      fos.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return convFile; 
    } 
+0

원래의 질문과는 관련이 없지만 적어도 로컬 파일 시스템에 쓰는 측면에서는 들어오는 파일 이름을 신뢰할 수 없어야합니다. 현재 코드에서 악의적 인 클라이언트는 중요한 파일을 업로드 된 파일로 덮어 쓸 수 있습니다. – jtahlborn

답변

0

multipart 파일을 파일로 변환하는 fileoutstream 논리에 문제가있는 것처럼 보입니다. 아래는 내가로 변환 로직을 대체 내가이 문제를 해결하는 데 사용되는 해결 방법,

이며,

public File multipartToFile(MultipartFile file) throws IllegalStateException, IOException 
    { 

     File tmpFile = new File(System.getProperty("user.dir") + File.separator + file.getOriginalFilename()); 
     file.transferTo(tmpFile); 
     return tmpFile; 
    } 

각 다중 파일 반복에 대해, 내가 목록에 변환 된 파일을 넣어 가지고 내가 업로드가 완료 후

파일, 나는 내 목록을 반복하고 파일을 삭제했습니다.

건배.