tentwentyfour / nextcloud-link

Javascript/Typescript client that communicates with Nextcloud's WebDAV and OCS APIs
MIT License
56 stars 7 forks source link

Uploaded files are empty with `uploadFromStream` #60

Open benschlegel opened 1 month ago

benschlegel commented 1 month ago

I'm trying to upload a file using client.uploadFromStream by doing something like this:

if (exists(currPath) && isFile(currPath)) {
  const fileStream = createReadStream(currPath)
  .on('data', (chunk) => {
    // logging for stream progress here
  })

  // Upload file from stream
  await client.uploadFromStream(`${nextcloud_path}/${fileName}`, fileStream);
}

This does not throw an error and creates a file at the correct location on nextcloud, but the file is 0 Bytes/empty. If I write out the stream to a buffer, it correctly reads the data.

If i use client.put instead, everything works as expected, but then you lose the benefits of using the stream in the first place. Changing the example to the following works as expected and writes the actual content to the file on nextcloud.

if (exists(currPath) && isFile(currPath)) {
  // Stream for reading in file
  const bufs = [];
  const fileStream = createReadStream(currPath)
    .on('data', (chunk) => {
      bufs.push(chunk);
    })
    .on('end', async () => {
      const fileBuffer = Buffer.concat(bufs);
      await client.put(`${nextcloud_path}/${fileName}`, fileBuffer);
    }); 
}

This leads me to believe that uploadFromStream is not working as I would expect it to.

I have docker set up through TrueNAS, I don't think upload limits are the problem image