我在闪亮的应用程序中生成文件,然后保存在临时文件中,稍后以 zip 形式下载。 然而,命名 zip 中的文件并不那么明显。 我用 ChatGPT 尝试解决这个问题一个多小时,但没有成功。
参见示例
library(zip)
filex <- 'file.csv'
file <- tempfile(fileext = ".csv")
write.csv(mtcars, file)
zip_file <- tempfile(fileext = ".zip")
zip::zipr(zip_file, files = file)
print(utils::unzip(zip_file, list = TRUE))
zip 文件的内容将类似于
file2d24470d428d.csv
我尝试创建一个命名向量,但没有成功
file2 <- file
names(file2) = filex
zip::zipr(zip_file, files = file2)
print(utils::unzip(zip_file, list = TRUE))
file3 <- filex
names(file3) = file
zip::zipr(zip_file, files = file3)
print(utils::unzip(zip_file, list = TRUE))
两种解决方案都不起作用。
主要问题是所有这些文件仅存在于 Shiny 和临时文件中,我无法将它们保存在其他地方,重命名等。
我寻找不同的包(archive,sf)。但同样,没有成功。
知道如何解决这个问题吗?
谢谢你
更多的是关于
tempfile()
,生成唯一的文件名是它的预期行为。对于您的情况,您可能需要考虑file.path(tempdir(), ...)
:
library(zip)
filex <- 'file.csv'
file <- file.path(tempdir(), filex)
file
#> [1] "C:\\Users\\m\\AppData\\Local\\Temp\\Rtmp4Gfo3K/file.csv"
write.csv(mtcars, file)
zip_file <- zip(tempfile(fileext = ".zip"), files = file, mode = "cherry-pick")
zip_file
#> [1] "C:\\Users\\m\\AppData\\Local\\Temp\\Rtmp4Gfo3K\\file478c4cf4302.zip"
zip_list(zip_file)
#> filename compressed_size uncompressed_size timestamp permissions
#> 1 file.csv 865 1816 2024-07-27 08:22:44 600
#> crc32 offset
#> 1 742a8e58 0
创建于 2024-07-27,使用 reprex v2.1.0