Collapse Drawer
Expand Drawer

C#

After downloading MultipartParser.cs and MultipartImage.cs and adding them to your project, you can use the parser like this:

    public static void FetchImages(RestClient client, String key)
    {
        var request = new RestRequest($"Property('{key}')/Media/All")
        {
            ResponseWriter = HandleMultipartStream
        };
        var response = client.DownloadData(request);
    }

    public static void HandleMultipartStream(Stream s)
    {
        MultipartParser parser = new MultipartParser(s);

        foreach (var image in parser.GetImages())
        {
            var filename = image.Headers["Content-ID"] + "_" + image.Headers["Object-ID"] + ".jpg";
            var f = File.OpenWrite(filename);
            image.Image.WriteTo(f);
            f.Close();
        }
    }

Go

After downloading MultipartParser.go and adding it to your project, you can use it like this:

func FetchImages(odata *o.Odata, key string) {
    resp := odata.FetchRaw(fmt.Sprintf("Property('%s')/Media/All", key)
    defer resp.Close()
    _ = MultipartParser(bufio.NewReader(resp), WriteMultipartImage)
}

func WriteMultipartImage(h map[string]string, image []byte) {
    _ = ioutil.WriteFile(h["Content-ID"]+"_"+h["Object-ID"]+".jpg", image, 0666)
}

Java

After downloading MultipartParserIterator.java and MultipartImage.java and adding them to your project, you can use the parser like this:

    URI uri = oDataClient.newURIBuilder(service_uri)
            .appendEntitySetSegment("Property")
            .appendKeySegment("1234567")
            .appendNavigationSegment("Media/All")
            .build();
    ODataEntitySetIteratorRequest<ClientEntitySet, ClientEntity> request =
        oDataClient.getRetrieveRequestFactory().getEntitySetIteratorRequest(uri);
    request.setAccept("*/*");
    InputStream buf = request.rawExecute();
    MultipartParserIterator parserIterator = new MultipartParserIterator(buf);
    while (parserIterator.hasNext()) {
        MultipartImage image = parserIterator.next();
        HashMap<String, String> headers = image.getHeaders();
        String filename = headers.get("Content-ID") + "_" + headers.get("Object-ID") + ".jpg";
        FileOutputStream out = new FileOutputStream(filename);
        out.write(image.getImage());
        out.close();
    }

Node.js

You will need to install two packages as follows:

npm install formidable@canary node-fetch

Then after downloading multipartparser.js and adding it to your project, you can use the parser like this:

    function fileWriter(headers, image) {
        let fs = require('fs');
        let f = fs.createWriteStream(headers['Content-ID'] + '_' + headers['Object-ID'] + '.jpg');
        f.write(image);
        f.close();
    }

    async function FetchImages(key, accessToken) {
        const fetch = require("cross-fetch");
        let res = await fetch("https://api-prod.corelogic.com/trestle/odata/Property('" + key + "')/Media/All",
            {headers: {Authorization: "Bearer " + accessToken.token.access_token}});
        let boundary = res.headers.get('content-type').split(';')[1].split('=')[1];
        let buffer = await res.buffer();
        const {MultipartParser} = require('./multipartparser');
        let parser = new MultipartParser(fileWriter);
        parser.parse(boundary, buffer);

Python

After downloading MultipartParser.go and adding it to your project, you can use it like this:

    def FetchImages(session, key):
        r = session.get(f"https://api-prod.corelogic.com/trestle/odata/Property('{key}')/Media/All")
        parser = MultipartParser(BytesIO(r.content))
        for h, i in parser:
            f = open(f"{h['Content-ID']}_{h['Object-ID']}.jpg", "wb")
            f.write(i)
            print(f"Created {h['Content-ID']}_{h['Object-ID']}.jpg")