2012-11-12 6 views
5

Wdrażam przesyłanie plików Ajax z Valum po stronie klienta i graj! 2.0.4 po stronie serwera. Moja metoda działania wygląda następująco:Przesyłanie pliku Ajax z wersją Play 2.0: istnieje, ale parametr zastępowania jest fałszywy

def ajaxup = Action(parse.temporaryFile) { request => 
    try { 
     request.body.moveTo(new File("/somepath/foo.jpg")) 
    } catch { 
     case e: Exception => Logger.error(e.getMessage) 
    } 
    Ok("File uploaded") 
    } 

Upload działa dobrze, to znaczy, że plik jest poprawnie zapisana pod nazwą foo.jpg na /somepath/. Ale również zgłasza wyjątek:

Path(/somepath/foo.jpg) exists but replace parameter is false 

Jak mogę tego uniknąć? Czy muszę ustawić dowolną właściwość pliku, który tworzę?

Odpowiedz

5

Zakładam, że chcesz zastąpić istniejący plik /somepath/foo.jpg. Jeśli nie, sprawdź wcześniej, czy plik już istnieje.

W każdym razie komunikat o błędzie dał już wskazówkę. Spójrz na klasę przypadku documentation dla klasy TemporaryFile. Metoda moveTo może mieć 2 parametry; drugi domyślnie przyjmuje wartość false i wskazuje, że chcesz zastąpić istniejący plik.

Więc, krótko mówiąc, zamiast

request.body.moveTo(new File("/somepath/foo.jpg")) 

piszesz

request.body.moveTo(new File("/somepath/foo.jpg"), true) 
4

Z moveTo() API doc, aby zastąpić plik, należy użyć:

request.body.moveTo(new File("/somepath/foo.jpg"), true)