java - 如何使用play.WS获取java.io.file?

标签 java file scala playframework byte

我可以获得bytes使用Play WS但我需要java.io.file上传于AWS S3 .

WS.url("http://media1.santabanta.com/full1/Indian%20%20Celebrities%28F%29/Yami%20Gautam/yami-gautam-27a.jpg").get().map { response =>
  val in = response.getAHCResponse.getResponseBodyAsBytes
Ok("yami")
}

现在我如何得到java.io.File

最佳答案

正如@Mikesname建议的那样,尝试将字节写入临时文件,然后上传。使用 Play 框架的 Promise 和异步功能。我相信你可以将这个 java 代码转换为 scala 作为你作业的一部分:

Promise<File> filePromise = WS.url("http://stackoverflow.com/questions/26967252/how-to-get-java-io-file-by-using-play-ws").get().map((r) -> {
    FileOutputStream out = null;
    File file = File.createTempFile("file", null);
    try {
        out = new FileOutputStream(file);
        InputStream bodyAsStream = r.getBodyAsStream();
        byte[] barr = new byte[8 * 1024];
        int read = 0;
        while ((read = bodyAsStream.read(barr)) != -1) {
            out.write(barr, 0, read);
        }
    } finally {
        if (out != null) {
            out.close();
        }
    }
    return file;
});

filePromise.map((file) -> {
    // Use amazon service to upload.
    return file;
});

关于java - 如何使用play.WS获取java.io.file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26967252/

相关文章:

java - 无法正确关闭文本文件

java - 用于 View 的 Hibernate orm

java - Android - 正确的多线程

php - 如何使用javascript检查是否选择了文件?

file - 批处理文件基础知识 : Adding a hardcoded integer to a variable in a for loop

scala - IntelliJ,分析 Scala 代码

java - While 循环按预期多执行一次

Android 6.0上的Android文件权限

scala - 如何查看SBT 0.11中的所有警告?

斯卡拉函数指针