- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个指向两个图像的有效 URL。
当我在第一个 URL 上运行 open() 时,它返回一个 Tempfile 类型的对象(这是雾 gem 期望将图像上传到 AWS 的对象)。
当我在第二个 URL 上运行 open() 时,它返回一个 StringIO 类型的对象(这会导致雾 gem 崩溃和燃烧)。
为什么 open() 不返回第二个 URL 的临时文件?
此外,是否可以强制 open() 始终返回 Tempfile?
从我的 Rails 控制台:
2.2.1 :011 > url1
=> "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xpf1/v/t1.0-1/c0.0.448.448/10298878_10103685138839040_6456490261359194847_n.jpg?oh=e2951e1a1b0a04fc2b9c0a0b0b191ebc&oe=56195EE3&__gda__=1443959086_417127efe9c89652ec44058c360ee6de"
2.2.1 :012 > url2
=> "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xfa1/v/t1.0-1/c0.17.200.200/1920047_10153890268465074_1858953512_n.jpg?oh=5f4cdf53d3e59b8ce4702618b3ac6ce3&oe=5610ADC5&__gda__=1444367255_396d6fdc0bdc158e4c2e3127e86878f9"
2.2.1 :013 > t1 = open(url1)
=> #<Tempfile:/var/folders/58/lpjz5b0n3yj44vn9bmbrv5180000gn/T/open-uri20150720-24696-1y0kvtd>
2.2.1 :014 > t2 = open(url2)
=> #<StringIO:0x007fba9c20ae78 @base_uri=#<URI::HTTPS https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xfa1/v/t1.0-1/c0.17.200.200/1920047_10153890268465074_1858953512_n.jpg?oh=5f4cdf53d3e59b8ce4702618b3ac6ce3&oe=5610ADC5&__gda__=1444367255_396d6fdc0bdc158e4c2e3127e86878f9>, @meta={"last-modified"=>"Tue, 25 Feb 2014 19:47:06 GMT", "content-type"=>"image/jpeg", "timing-allow-origin"=>"*", "access-control-allow-origin"=>"*", "content-length"=>"7564", "cache-control"=>"no-transform, max-age=1209600", "expires"=>"Mon, 03 Aug 2015 22:01:40 GMT", "date"=>"Mon, 20 Jul 2015 22:01:40 GMT", "connection"=>"keep-alive"}, @metas={"last-modified"=>["Tue, 25 Feb 2014 19:47:06 GMT"], "content-type"=>["image/jpeg"], "timing-allow-origin"=>["*"], "access-control-allow-origin"=>["*"], "content-length"=>["7564"], "cache-control"=>["no-transform, max-age=1209600"], "expires"=>["Mon, 03 Aug 2015 22:01:40 GMT"], "date"=>["Mon, 20 Jul 2015 22:01:40 GMT"], "connection"=>["keep-alive"]}, @status=["200", "OK"]>
tempfile = open(params["avatar"])
user.avatar.store!(tempfile)
最佳答案
我假设您正在使用 Ruby 的内置 open-uri
允许您使用 open()
下载 URL 的库.
在这种情况下,Ruby 只需要返回一个 IO
目的。不能保证它将是一个文件。我的猜测是 Ruby 根据内存消耗做出决定:如果下载量很大,则将其放入文件中以节省内存;否则它会用 StringIO
将它保存在内存中.
作为一种解决方法,您可以编写一个方法,将流写入临时文件(如果尚未下载到文件):
def download_to_file(uri)
stream = open(uri, "rb")
return stream if stream.respond_to?(:path) # Already file-like
Tempfile.new.tap do |file|
file.binmode
IO.copy_stream(stream, file)
stream.close
file.rewind
end
end
关于ruby-on-rails - rails : open() returns StringIO instead of Tempfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31527154/
我需要创建一个临时目录来存放另一个命名目录和子文件。最后,指定的目录和子文件将附加到压缩包中,临时目录可以删除。最初打算使用 mkdtemp()但它看起来像 TemporaryDirectory()方
在 Heroku 托管的 Rails 3 应用程序中,一个多部分文件被发布到我的应用程序,我正在尝试使用一些示例代码: File.open(params['filename'][:tempfile].
有谁知道在 JRuby 中是如何处理 tempfile.rb 的。它在 Ruby 中,但不在 JRuby 中。 有人有任何想法吗? 干杯 埃夫 最佳答案 您仍然可以“要求'tempfile'”并且它会
我目前正在 Ruby 上运行这段代码。 file = Tempfile.new(['tempemail', '.html']) file 'xx' 如果没有 file.close,您将得到一个空字符
谁能告诉我在 python 中使用 tempfile 的好处,在什么情况下我应该使用它? 我正在编写一个程序来处理一个文件,它会先调用另一个脚本来处理该文件,生成一个临时文件并执行下一步,我将自己编写
在上传到新目的地之前,我使用 Tempfile 存储生成的 PDF。 pdf_file = WickedPdf.new.pdf_from_string(msgbody) tempfil
我正在尝试创建一个临时文件并向其中写入一些文本。但是我在控制台中得到了这种奇怪的行为 t = Tempfile.new("test_temp") # => # t # t.write("test d
我们的处理服务器主要与 TempFiles 一起工作,因为它使我们这边的事情变得更容易:无需注意删除它们,因为它们会被垃圾收集或处理名称冲突等。 最近,我们遇到了 TempFiles 在此过程中过早进
我正在更改文件的内容,因此我逐行读取文件,替换我想要的内容并逐行写入临时文件。处理整个文件后,我删除原始文件,并将临时文件重命名为原始文件名。像这样 File orginialFile = new F
我正在使用 django 和 Google App Engine。我无法确定错误来自哪里,因为如果我在本地使用它,我的网站就会正常运行。在我将其部署到 GAE 上之后,它工作正常,但是当使用 goog
我正在使用 tempfile.mkstemp 生成一个随机可用的文件名并使用 os.fdopen 写入一些内容。然后我通过 celery 将文件名传递给任务。 此任务打开文件,处理内容,最后删除文件。
我正在使用 tempfile.NamedTemporaryFile()存储一些文本直到程序结束。在 Unix 上工作没有任何问题,但在 Windows 上返回的文件无法读取或写入:python 给出
我一直在使用带有前缀的 tempfile.mkdtemp 来创建我的临时文件。这导致我的 tmp 文件夹中有很多不同的目录,其中包含“tmp/myprefix{uniq-string}/”。 我想改变
我有一个 GUI (lxn/walk) 应用程序修补程序,它通过 ftp 下载文件,将其流式传输到临时文件并提取内容以更新本地文件。删除文件命令被推迟。 除非用户在下载文件时退出程序,否则文件不会被删
在 python 中,您可以创建一个临时文件,如下所示: tempfile.TemporaryFile() 然后你就可以写信给它了。 GNU/Linux 系统中写入的文件在哪里?我似乎无法在/tmp
我正在编写一个 Python 脚本,该脚本需要创建大约 50 个不同的临时文件,这些文件在脚本执行过程中经常被附加并在最后合并。我确信 tempfile 模块可以满足我的需要,但我无法通过阅读文档来弄
无论如何我可以写入临时文件并将其包含在命令中,然后关闭/删除它。我想执行命令,例如:some_command/tmp/some-temp-file. 非常感谢。 import tempfile tem
我在 Python 中使用 tempfile 和 sqlite3 模块。 以下代码有效: import sqlite3, tempfile conn1 = sqlite3.connect(tempfi
根据 tempfile.mkstemp docs , mkstemp() returns a tuple containing an OS-level handle to an open file (
我想在几天内学习Java。我尝试将内容写入临时文件并将该文件保存在 Windows 中的临时文件夹中(这是我的任务)。我找到了一些解决方案,但对我不起作用:( http://www.mkyong.co
我是一名优秀的程序员,十分优秀!