download⤵️
for Deno
Deno fetch api
based module to download
file from a URL.
Import
A specific version (preferred):
// Note this "@v2.0.2" part in the url,
// this can be any version tag of this library
import { download } from "https://deno.land/x/download@v2.0.2/mod.ts";
Non-versioned URL / "latest" (for quick tests only!):
import { download } from "https://deno.land/x/download/mod.ts";
Note: The problem with importing the versionless url is that each team member
might get a different version of this library, depending on when they downloaded
this lib the first time.
Therefore it's better to import from a versioned url and update the version
manually.
Extra Tip: To avoid needing to update this url in every file in your codebase,
you can write a file like /dependencies/download.ts
in your repo, which
re-exports the contents of this library like this:
export * from "https://deno.land/x/download@v2.0.2/mod.ts";
After that you can import your local /dependencies/download.ts
file everywhere
you need it.
Note that the examples in this file are using the non-versioned url to keep them
straightforward.
Usage
SAMPLE 1 :
This is how you can use the download function directly in a ts file executable by deno.
import { download } from "https://deno.land/x/download/mod.ts";
const url =
"https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf";
try {
const fileObj = await download(url);
} catch (err) {
console.log(err);
}
Alternatively :
import { download } from "https://deno.land/x/download/mod.ts";
const url =
"https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf";
download(url)
.then((fileObj) => {
console.log(fileObj);
})
.catch((err) => {
console.log(err);
});
By default, the module creates a temporary directory every time you call the
download
function and downloads the file into it.
You can specify the download destination, filename and also the file permission via the second parameter.
Note :
As of now download directory should be present, else error will be thrown. This will not be the case in future.
// def of 2nd parameter. ./type.ts
Destination {
dir?: string,
file?: string,
mode?: number
}
SAMPLE 2 :
import { Destination, download } from "https://deno.land/x/download/mod.ts";
const url =
"https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf";
try {
// NOTE : You need to ensure that the directory you pass exists.
const destination: Destination = {
file: "example.pdf",
dir: "./test",
};
/* sample with mode
const destination: Destination = {
file: 'example.pdf',
dir: './test',
mode: 0o777
}
*/
const fileObj = await download(url, destination);
} catch (err) {
console.log(err);
}
Passing http methods and headers:
Behind the scene this module uses
deno's fetch api. The third
parameter to download
function is
RequestInit. You can pass
body
, headers
, cache
, method
... the same way you pass to the fetch api.
Alternatively you can pass a complete
Request object as the first
parameter, instead of using a string url
with the third requestInit
param
SAMPLE 3 :
import { Destination, download } from "https://deno.land/x/download/mod.ts";
const url =
"https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf";
try {
const destination: Destination = {};
const reqInit: RequestInit = {
method: "GET",
};
/* sample with mode
const destination: Destination = {
file: 'example.pdf',
dir: './test',
mode: 0o777
}
*/
const fileObj = await download(url, destination, reqInit);
} catch (err) {
console.log(err);
}
Return Value
download
function returns an object with attributes: file
(filename), dir
,
fullPath
, and size
(in bytes)
// definiton of return object. check:./type.ts
DownloadedFile {
file: string,
dir:string,
fullPath: string,
size: number
}
Deno Permission
You need --allow-net
and --allow-write
permission to use download
function.