2017-09-05 103 views
0

Jerseyを使用してファイルをアップロードし、残りのサービスにデータをフォームするspring mvcを使用して、残りのクライアントを開発しました。一時ファイルを削除する

残りのクライアントのTomcatホームディレクトリにアップロードしたファイルを見ることができます。

成功応答を受け取った後、自動的に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

問題は、マルチパートファイルをファイルに変換する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; 
    } 

に変換ロジックを交換し、それぞれのマルチパートファイルの反復のために、私はリストに変換されたファイルを入れていると私はアップロードが完了した後、

です私のリストを繰り返し、ファイルを削除しました。

乾杯。

関連する問題