使用rapture-io从base64字符串创建临时文件

6
基本上,我想从一个base64字符串内容创建一个临时文件。现在,我使用本地java-io函数来实现这一点。但是我想使用Scala的rapture-io库来达到相同的结果。
所以我的问题是,是否可以使用rapture-io实现这一点,如果可以,如何实现?
我已经查阅了文档,但不够具体。

https://github.com/propensive/rapture-io/blob/master/doc/introduction.md

这是我的实际代码:

import org.apache.commons.codec.binary.Base64
import java.io.FileOutputStream
import java.io.File

val data: String = base64StringContent //Base64 String content of the file.
val fileName = myFileName
val fileExt = myFileExt

//It does write the file in my temp folder.
val file: File = File.createTempFile(fileName, fileExt)
val fileByteArray: Array[Byte] = Base64.decodeBase64(data)
val fileOutFile: FileOutputStream = new FileOutputStream(file)
fileOutFile.write(fileByteArray)
fileOutFile.close()
file.deleteOnExit()
file
1个回答

1
这对您有效吗?
import rapture.fs.platform.posix
import rapture.io._
import rapture.core._
import rapture.fs._
import strategy.throwExceptions

 val tmpFile  = (File / "tmp").tempFile(prefix = "yourfileName",suffix = ".extension")
 "data" >> tmpFile
 tmpFile.deleteOnExit()
 tmpFile.delete()

未在Windows上测试。您可能需要使用不同的分隔符,例如\\而不是/。

import rapture.fs.platform.windows
import rapture.io._
import rapture.core._
import rapture.fs._
import strategy.throwExceptions

 val tmpFile  = (File / "C:" / "Windows" / "Temp" ).tempFile(prefix = "yourfileName",suffix = ".extension")
 "data" >> tmpFile
 tmpFile.deleteOnExit()
 tmpFile.delete()

你好!感谢您的回答!代码在“val tmpFile…”行中出现错误,显示:“系统找不到指定的路径”。我使用的是Windows环境... 我应该将其更改为其他文件夹/路径吗?还有其他适用于两个环境的替代方案吗?(我计划在Heroku上运行此代码) - maya.js
请看下面的未经测试的解决方案。我想你需要根据其他信息有条件地导入平台。你可以将平台放在配置文件中,或者基于查询System.properties来设置它。你也可以根据平台类型有条件地创建fileUrl。 - bearrito
Windows路由不是这样工作的,只需要在“C”后面添加“:”即可。但问题在于...它确实会在我的“Temp”文件夹中创建文件,但所有文件都是“损坏”的。我假设“data”是我的base64字符串值,对吗?(“data”>> tmpFile) - maya.js
为什么你说它已经损坏了?它的内容是什么,你期望得到什么?你可能需要使用类似于“import encodings.UTF-8”这样的方式来更改编码。 - bearrito
我的错误 :p.我将"数据" >> tmpFile替换为:val fileByteArray: Array[Byte] = Base64.decodeBase64(data) fileByteArray >> tmpFile 非常有效!适用于任何类型的文件:图像、音频等非常感谢! :) - maya.js
如果它能正常工作,你可以标记我的答案为已接受吗?编辑:我看到它已经完成了。谢谢! - bearrito

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接