从我看到的几个帖子中,我正在尝试这个
x = Base64.decode64("data:image/png;base64,iVBOR....")
File.open('test.png','wb') {|file| file.write x}
Run Code Online (Sandbox Code Playgroud)
但是后来我无法用观众打开图像,我还需要做更多的事吗?
mu *_*ort 27
您的问题是您尝试将'data:image/png;base64,'前缀解码为Base64数据; 该前缀是完全有效的Base64数据,但它不是PNG文件的Base64表示.结果是你的test.png文件包含一堆废话,后面跟着一些实际上是PNG文件的位.在解码PNG之前剥去数据URL前缀:
data_url = "data:image/png;base64,iVBOR...."
png = Base64.decode64(data_url['data:image/png;base64,'.length .. -1])
File.open('test.png', 'wb') { |f| f.write(png) }
Run Code Online (Sandbox Code Playgroud)
mu_is_too_short答案非常接近,但它假设base64流将包含PNG数据.情况并非总是这样,所以我建议使用mime类型库来建立正确的文件扩展名:
REGEXP = /\Adata:([-\w]+\/[-\w\+\.]+)?;base64,(.*)/m
data_uri_parts = data_url.match(REGEXP) || []
extension = MIME::Types[data_uri_parts[1]].first.preferred_extension
file_name = "myfilename.#{extension}"
File.open(file_name, 'wb') do |file|
file.write(Base64.decode64(data_uri_parts[2]))
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13210 次 |
| 最近记录: |