Saving a BOX file Locally
Hi,
I have one use case where I have to access downloadurl of a file and save the file on local machine.
The file gets saved but when I try to open it it says file is corrupted.
How do I achieve this?
The code snippet is as below.
-
Yes using nodejs
Our company has a box wrapper service written in Java, it uses Java SDK to connect box.
I am simply trying to use downloadurl that this wrapper service returns to download the file using a program.
Wrapper service url: http://qa-me......................amazonaws.com/storage/api/repository/file/658550023650
BOX File id :658550023650downloadUrl is in bold below. (I know it expires so i get a fresh downloadurl every time I try to download.)
Response from the wrapper service.Response:
{
"createdBy": "feedUser",
"createdDate": 158***phone number removed for privacy***,
"description": "uploaded by batch job",
"downloadUrl": "https://dl.boxcloud.com/d/1/b1!3lgW66ASjWgk8TVTkHNZtBosrggcM52xqFCei40jl-vnTkyi985WMCNxWZpUPl75PnSG52CM58o_QgecTA-Z0MNZOi25crV1LH1nnE-fMn5GXjDjDoV3BNTfZGR56c0pOgMJN_NbQFB365VSUyNIf-gQW9DG6sC2bnTFrBZcCpWhmd8y8Q9kllJ-ZmxldYxkHdMpTi_6trKlLdrnIuHqD5wrbPHzTWqLWoMiK0Mn-He7vFDYxWbeRo3KR2wRfW-SnQnLOZR3mCWD8cwWXt0NqH6rYINjDM8GSU6vIcwnQ7qP2q7zDm8Y6D5fzfYfZ_wAkwdIQFgfpzCugifkQ6qaTnyb21fGkNYENnsLnAgolfE8pcPeU0aqlyT2hGvz_9s_bGDAHm-i4bCddR-GGEUe3Nz605hmkDU-Wd2_OTyBXUXpvjOBE6l93r3_tDDRpwYcETLBc7vmNyO4DL2Vbc9IS-QvolZRFl8ng09tpLiYRdP__pzdMCXyjFT-FbX754a1YXKQd8VnbHIsy-o2E2B4HCuqDkr-scavVrxr4_vBqFZ3DzR-38sucSzq2S8KGPWDzGdn2VAscAx2_in8GIjxheyPKiww1Zj9lTd9Q2BQkEnBq9mZK29AvH7zp4AUuKOoMBorSDi9EAGllPzCC3wG0BTkiHSK7N6qQ-9kFZS38nWrLI56Tz_CIfjEEqQtLyZIeJAfwazgV_Yzh5t3aXzT1MswCcjCSW03uXHzWrC_nD-XtGHk-ZqZLO6grEtCqmNKKT_7-EKnCaD1BJkLQV6tFpfjvPpNIr5t8r9PZpJule629OLho0lsZzbFZzJ1M-7ZUfKfNlhnrzuEGVTgUhLO1KmsKiBHN63oVQoEOvDR2WTQt_4YUiKsNIdKfKtbGzfm-IcwIYD-fsEeoCjeAPw7WnMlCO1tkb8bdWFiYbGK2sR-wAwbi3V4iFE1Yyc0ESQ-7W_ksVIfHzK5ea0TUtQ_rZWblraOoO2Xi446OQ52bi7m_eHVza0sX8E6DfG9Zu22sdYNyTkoGFYSB6A4j1gRDCwtYyQzgtBCC0eltPK8KwKwpoPEu9SYtR8G399MN5OaQyFb8_BH5ktfgk8KN8HJF8u0XkRHhzl6s3zm9wFVIUUTRUOHbeCJtfbbBPBl_oQRVj0DUT8FEFYYI62s0jVTVlgddGqthh0GgrVs9GVKkA2RrSHpIS5UZfuYoeWd0GMfdFChh149jCzxd5apSQL3OiyJzwpeEZ4cftLA_I3HnA9pjFK9uZF6TT6mo13dm7SpEY2GHfnxbzbj_Hi2_w../download",
"id": "658550023650",
"lastModifyingUserName": "feedUser",
"modifiedDate": 1588030621000,
"originalFilename": "1507.pdf",
"currentVersion": 3,
"folderId": "",
"filePath": "All Files/feed_QA/",
"properties": [
{
"key": "modified_by",
"value": "feedUser"
},
{
"key": "creation_date",
"value": "1588030622302"
},
{
"key": "modified_date",
"value": "1588030623262"
},
{
"key": "created_by",
"value": "EfeedUser"
}
],
"isFolder": false,
"folderName": "",
"isPDF": false
} -
Ok, I am not 100% familiar with Java.
My gut feeling with this one is that either the encoding of the downloaded file isn't handled properly, or the stream is somehow truncated before it's finished. It's hard to see without seeing all the code that requests the download URL.
I'd have a look at our Java SDK and look at the source to see how our SDK handles downloads.
https://github.com/box/box-java-sdk/blob/master/doc/files.md#download-a-file
-
The way I'd normally do this in Node is as follows. This seems to work for a PDF of my own.
let fs = require('fs') let request = require('request') let url = 'https://dl....' let filename = 'file.pdf' request(url).pipe(fs.createWriteStream(filename)).on('close', () => { console.dir('Done') })
I tried your way using the Buffer and that indeed seems to be causing me to get a blank PDF.
Please sign in to leave a comment.
Comments
7 comments