2013-11-23 2 views
0

게임 응용 프로그램이 있습니다. 서버 쪽에서 이미지 크기를 조정할 때 play-resplay-scalr 라이브러리를 사용하고 있습니다. 이미지 파일로 여러 부분으로 양식을 제출할 때. 서버 측에서 나는 Mac에서만 Windows 시스템에 예외를 따르지 않습니다.Windows에서 apche 공유 파일 이동 메서드가 실패합니다.

스택 추적

Caused by: java.io.IOException: Failed to delete original file 'E:\tmp\multipartBody677849053220396275asTemporaryFile' after copy to 'E:\work\projects\rismus\res\profile\268d\3a0d\268d3a0d9a36e7cc8b826b274de4aaa47fdc6591.jpg' 
    at org.apache.commons.io.FileUtils.moveFile(FileUtils.java:2835) ~[commons-io.jar:2.4] 
    at se.digiplant.res.api.Res$.put(Res.scala:81) ~[play-res_2.10-1.0.1.jar:1.0.1] 
    at se.digiplant.res.api.Res$.put(Res.scala:117) ~[play-res_2.10-1.0.1.jar:1.0.1] 
    at controllers.ImageUploader$$anonfun$upload$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$1.apply(ImageUploader.scala:37) ~[na:na] 
    at controllers.ImageUploader$$anonfun$upload$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$1.apply(ImageUploader.scala:36) ~[na:na] 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) ~[scala-library.jar:na] 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) ~[scala-library.jar:na] 
    at scala.collection.immutable.List.foreach(List.scala:318) ~[scala-library.jar:na] 
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244) ~[scala-library.jar:na] 
    at scala.collection.AbstractTraversable.map(Traversable.scala:105) ~[scala-library.jar:na] 
    at controllers.ImageUploader$$anonfun$upload$2$$anonfun$apply$1$$anonfun$apply$2.apply(ImageUploader.scala:36) ~[na:na] 
    at controllers.ImageUploader$$anonfun$upload$2$$anonfun$apply$1$$anonfun$apply$2.apply(ImageUploader.scala:26) ~[na:na] 
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) ~[scala-library.jar:na] 
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) ~[scala-library.jar:na] 
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:42) ~[akka-actor_2.10.jar:2.2.0] 
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386) ~[akka-actor_2.10.jar:2.2.0] 
    ... 4 common frames omitted 

그것은 문제를 이해하기 위해 더 많은 정보를 요구하는 경우 알려주세요.

편집 : 그들은 열려 삭제할 수 없습니다 동안 업로드 기능

def upload(accountId: Long): EssentialAction = Authenticated(
    account => Action.async(parse.multipartFormData) { request => Future { 
     if (account.id != accountId) Results.Unauthorized 
     else { 

      if (request.body.files.filter(f => !checkFileType(f)).length > 0) { 
      BadRequest("Unsupported file type") 
      } else { 

      val assets = request.body.files.map { file => 
       val assetId = Res.put(file, source, Seq.empty) //fails here 
       Map("asset_id" -> assetId, "mime" -> file.contentType.get) 
      } 

      if (assets.length == 0) BadRequest("No Images uploaded") 


      DB.withConnection { implicit c => 
       assets.foreach { asset => 
        Accounts.updatePicture(accountId, asset("asset_id")) 
       } 
      } 

      Ok(Json.toJson(assets)) 

      } 
     } 
     } 
    }, 
    failedResult = Results.Unauthorized 
) 
+0

안녕하세요! 나는 플레이 레스와 플레이 스 래러의 창안자입니다. 미안하지만 이걸 테스트 할 창문이 없어요. 무거운 짐을 싣기 위해 아파치 커먼즈를 사용하고 있기 때문에 파일 복사가 진행중이므로 버그가있는 것처럼 보입니다. 내가 멀리 갈 수 있도록 할 수있는 일이 있다면 알려주지. :) –

답변

0

Windows 파일에 잠겨있다. Unix/Linux에서 파일은 일반적으로 열려있는 동안 삭제 될 수 있습니다 (네트워크 파일 시스템이 포함 된 경우는 제외). 파일은 디스크에 여전히 존재하지만 마지막 파일 디스크립터가 닫힐 때까지 공간을 차지하지만 디렉토리에서 분리됩니다. 표시되지 않습니다.

문제는 임시 파일이 아직 닫혀 있지 않다는 것입니다.

+0

알았어,이게 무슨 해결책인지 제안 해 줄래? 삭제하기 전에 임시 파일을 어떻게 닫을 수 있지? – pankajmi

+0

@pankajmi 나는 소스 코드를보고 버그를 발견하지 못했습니다. 어쩌면 버그가 코드에 있거나 어쩌면 다른 버전을 버그와 함께 사용하고있을 수도 있습니다. 어느 쪽이든, 자세한 내용이 도움이 될 것입니다. –

+0

나는 play-scalr 버전 1.0.1을 사용하고 있으며, [commit history] (https://github.com/digiPlant/play-scalr/commits/)에 따르면 이것은 최신 것으로 보인다. 더 많은 코드로 내 질문을 편집했습니다. – pankajmi

관련 문제