2012-11-12 20 views
5

Tôi đang triển khai tải lên tệp Ajax với Valum ở phía máy khách và Play! 2.0.4 ở phía máy chủ. phương pháp hành động của tôi trông như thế này:Tải lên tệp Ajax với Play 2.0: tồn tại nhưng thay thế thông số là false

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") 
    } 

Việc tải hoạt động tốt, có nghĩa là, các tập tin được lưu một cách chính xác dưới cái tên foo.jpg trên /somepath/. Nhưng nó cũng ném ngoại lệ:

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

Làm cách nào để tránh điều đó? Tôi có cần đặt bất kỳ thuộc tính nào trên tệp tôi đang tạo không?

Trả lời

5

Tôi giả định rằng bạn muốn ghi đè lên tập tin hiện có /somepath/foo.jpg. Trong trường hợp bạn không, chỉ cần kiểm tra trước khi tập tin đó đã tồn tại.

Dù sao, thông báo lỗi đã đưa ra gợi ý cho bạn. Nhìn vào số documentation cho lớp trường hợp TemporaryFile. Phương thức moveTo có thể có 2 tham số; tùy chọn thứ hai mặc định là false và cho biết rằng bạn muốn thay thế tệp hiện có.

Vì vậy, trong ngắn hạn, thay vì

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

bạn viết

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

Từ moveTo() API doc, để thay thế file, bạn nên sử dụng:

request.body.moveTo(new File("/somepath/foo.jpg"), true) 
Các vấn đề liên quan