我正在调用基于RETS的服务来收集有关房产列表的数据......当然,关于这一点的主要方面之一是获取照片。但是,照片的数据实际上是原始图像数据:
ÿØÿàJFIF``ÿá"ExifII*îhÿÛC $.' ",#(7),01444'9=82<.342ÿÛC 2!!22222222222222222222222222222222222222222222222222ÿÀU"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ?÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€
等等等......
如何转换/使用此原始数据并将其转换为Web服务器上的物理文件?
答案 0 :(得分:2)
尝试将此原始数据写入文件。如果您确定文件格式始终为JPG,则将.jpg
设置为扩展名。
如果没有,您可能希望查看here - 这可以帮助您获取正确的文件格式,然后设置适当的文件扩展名。
编辑我不知道RETS协议,但它可能会返回您图像的内容类型,这应该会更加简化整个过程。 :)
答案 1 :(得分:0)
此外,如果在对给定列表的所有照片使用GetObject请求时在流中获得多个jpeg,则可以拆分ÿØÿà字节(\ xff \ xd8 \ xff \ xe0)并保存每个字节流由于作为jpeg文件拆分而产生,但你必须在每个jpeg的开头保留ÿØÿà,因此在完成拆分后你需要在每个块的开头重新插入它们。我也从“RETS-like”服务中遇到过这种情况,并且必须手动将下标(_1,_2等)添加到分割产生的jpeg文件名中。它最终变成了:
if response.find('\xff\xd8\xff\xe0') > -1:
blist = response.split('\xff\xd8\xff\xe0')
blist.remove("") /* get rid of any empty list elements resulting from split */
index = 1
for img in blist:
file_nm = os.path.join(photo_dir, "{0}_{1}.jpg".format(photo_id, index))
with open(photo_file_nm, "wb") as photo_file:
photo_file.write('\xff\xd8\xff\xe0' + img)
index += 1
...其中photo_dir和photo_id在此块之外定义。这个例子是python,但可以很容易地翻译成php。
答案 2 :(得分:0)
您必须从RETS服务器解析mime multipart对象。您可以手动获取每一行并在mime seperator字符串中对其进行分块,您还必须确定它在标题中的位置。
如果您想节省时间,请查看phrets class源代码(或只使用它)。 https://github.com/troydavisson/PHRETS/blob/master/phrets.php#L141
以下是一些例子, https://github.com/troydavisson/PHRETS/wiki/GetObject