My zip file has files nested in subfolders.
First I used db:store to store delta.zip into the database.
My first problem was I got an error "
*invalid entry CRC: expected 0x0 but got..."*
The raw stored file was slightly larger
*than the original zip.*
So I replaced the zip file in the raw folder with the original one and the
first error went away.
Now I don't get any error bu the extracted file are not stored as binaries

What is wrong with this code?
I removed the updating annotation and returned $target instead of the
try/store/catch inside the loop and got the expected result path name

let $database := 'db'
let $extractTo := 'target.zip'

(: path to raw stored zip  :)
let $archivePath := 'alpha/bravo/charlie/delta.zip'

let $archive  := db:retrieve($database, $archivePath)
let $basePath := replace($archivePath, '[^/]+$', '') || $extractTo
let $entries  := archive:entries($archive)
let $contents := archive:extract-binary($archive)
return for-each-pair($entries, $contents, %updating function($entry,
$content) {
  let $target := $basePath || '/' || $entry/text()
  return try {
      db:store($database, $target, $content)
    } catch * {
      ()
    }
})

Reply via email to