【发布时间】:2021-04-13 17:06:29
【问题描述】:
这个问题涉及使用 Java/Groovy/Grails 处理文件。我对这些技术还很陌生,所以请耐心等待。
在收到用户提交的来自客户端的 POST 请求的文件后,我正在将文件上传到 Stripe。如果可以避免,我不想将其保存到磁盘。
我收到文件并解析成一个字节数组。
List<MultipartFile> files = ((MultipartHttpServletRequest) request).getMultiFileMap().collect {
it.value
}.flatten()
try {
if (files.size > 0) {
// parse file and get byte array input stream
MultipartFile file = files.first()
String fileName = file.originalFilename
byte[] bytes = file.inputStream.getBytes()
callStripeFileService(bytes)
}
这个字节数组被传递给一个服务,该服务调用 Stripe,如 their docs 所示。
callStripeFileService(byte[] bytes) {
ByteArrayInputStream bais = new ByteArrayInputStream(bytes)
String tempFilePath =
"src/main/resources/tmp/${fileName}"
IOUtils.copy(bais, new FileOutputStream(tempFilePath))
FileCreateParams params = FileCreateParams.builder()
.setFile(new java.io.File(tempFilePath))
.setPurpose(FileCreateParams.Purpose.RECEIPT)
.build()
File upload = File.create(params)
}
这工作得很好,但我不喜欢将文件写入磁盘只是最终不得不将其删除。我还怀疑写入磁盘肯定会对性能产生影响。
我希望只将流传递给 Stripe,但 .setFile() 方法只接受 File 或 FileInputStream。
有什么方法可以创建有效的 Java File 对象而不将任何内容保存到磁盘?
【问题讨论】:
标签: java grails groovy stripe-payments