我正在从网站上提取记录,并尝试存储它返回的图像之一(一个BMP文件)。问题是,该网站仅返回直接下载链接,没有预览。很像this link(但我的是BMP而不是PDF)
没有预览,只有立即下载。
似乎没有一种方法可以生成不同的链接,而且我不知道如何使用rails处理此URL!我只需要将其保存到我的项目/本地文件树中即可。有什么想法吗?
答案 0 :(得分:0)
您必须执行3个操作:获取url的内容,将其写入磁盘,然后将其附加到您的模型中。
Ruby有各种库来处理HTTP获取请求。当然还有标准库Net :: HTTP和其他max所说的HTTP客户端gem。我使用了其中一些,我最喜欢的选择是http.rb,但您可以选择任何喜欢的东西。
您应该选择一个文件夹和一个文件名并写入流。
attachments也有很多宝石可以处理。如果您更喜欢ActiveStorage,则可以检查方法attach
一个简单的实现可能看起来像这样:
# You can use and other HTTP gem or standard Net::HTTP
gem 'http'
require 'http'
url = 'https://www.ruby-lang.org/images/header-ruby-logo.png'
# You can set timeouts and other options here
response = HTTP.follow(max_hops: 2).get(url)
# You can check for statuses or other responses
return if response.status != 200 || response.content_type.nil?
# You can grab filename from url or set another filename
filename = SecureRandom.hex
path = File.join('tmp', filename)
# Write stream somewhere
file = File.open(path, 'wb')
response.body.each do |chunk|
file.write(chunk)
end
# Suppose you use ActiveStorage, you can use the `attach` method
your_model.you_attribute.attach(
io: File.open(path),
filename: filename,
content_type: response.content_type.mime_type
)