如何通过Aws::S3模块将Ruby编写的XML文件高效上传至Amazon S3存储?
- 内容介绍
- 相关推荐
本文共计764个文字,预计阅读时间需要4分钟。
XML 不是特殊类型,S3 只认字节流。你不能直接传递 Nokogiri::XML 或 Rexml::Document 实例——会报 ArgumentError: data must be a String or IO-like object 错误。
- 正确做法:先调用
to_xml(Nokogiri)或to_s(REXML)转成字符串,再传给put_object - 大文件(>50MB)建议用
File.open(..., 'rb')传 IO 对象,避免内存暴涨 - 别漏设
content_type: 'application/xml',否则 S3 默认存为binary/octet-stream,下游解析可能失败
中文字符或特殊符号导致 XML 解析失败?检查编码和 Content-MD5
Ruby 默认用 UTF-8,但如果你的 XML 声明里写了 <?xml version="1.0" encoding="GB2312"?>,而实际内容是 UTF-8 字节,S3 不校验,但下游服务一读就报 XML declaration not well-formed。
本文共计764个文字,预计阅读时间需要4分钟。
XML 不是特殊类型,S3 只认字节流。你不能直接传递 Nokogiri::XML 或 Rexml::Document 实例——会报 ArgumentError: data must be a String or IO-like object 错误。
- 正确做法:先调用
to_xml(Nokogiri)或to_s(REXML)转成字符串,再传给put_object - 大文件(>50MB)建议用
File.open(..., 'rb')传 IO 对象,避免内存暴涨 - 别漏设
content_type: 'application/xml',否则 S3 默认存为binary/octet-stream,下游解析可能失败
中文字符或特殊符号导致 XML 解析失败?检查编码和 Content-MD5
Ruby 默认用 UTF-8,但如果你的 XML 声明里写了 <?xml version="1.0" encoding="GB2312"?>,而实际内容是 UTF-8 字节,S3 不校验,但下游服务一读就报 XML declaration not well-formed。

