mirror of
https://github.com/cheveguerra/whatsapp-web.js.git
synced 2026-04-18 11:39:14 +00:00
165 lines
5.9 KiB
HTML
165 lines
5.9 KiB
HTML
<!doctype html>
|
|
<html>
|
|
|
|
<head>
|
|
<meta name="generator" content="JSDoc 3.6.7">
|
|
<meta charset="utf-8">
|
|
<title>whatsapp-web.js 1.19.1 » Source: structures/MessageMedia.js</title>
|
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
|
<link href="css/baseline.css" rel="stylesheet">
|
|
</head>
|
|
|
|
<body onload="prettyPrint()">
|
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
|
<div id="jsdoc-navbar-container">
|
|
<div id="jsdoc-navbar-content">
|
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>1</a>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
<div id="jsdoc-body-container">
|
|
<div id="jsdoc-content">
|
|
<div id="jsdoc-content-container">
|
|
<div id="jsdoc-banner" role="banner">
|
|
</div>
|
|
<div id="jsdoc-main" role="main">
|
|
<header class="page-header">
|
|
<h1>Source: structures/MessageMedia.js</h1>
|
|
</header>
|
|
<article>
|
|
<pre class="prettyprint linenums"><code>'use strict';
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const mime = require('mime');
|
|
const fetch = require('node-fetch');
|
|
const { URL } = require('url');
|
|
|
|
/**
|
|
* Media attached to a message
|
|
* @param {string} mimetype MIME type of the attachment
|
|
* @param {string} data Base64-encoded data of the file
|
|
* @param {?string} filename Document file name. Value can be null
|
|
* @param {?number} filesize Document file size in bytes. Value can be null
|
|
*/
|
|
class MessageMedia {
|
|
constructor(mimetype, data, filename, filesize) {
|
|
/**
|
|
* MIME type of the attachment
|
|
* @type {string}
|
|
*/
|
|
this.mimetype = mimetype;
|
|
|
|
/**
|
|
* Base64 encoded data that represents the file
|
|
* @type {string}
|
|
*/
|
|
this.data = data;
|
|
|
|
/**
|
|
* Document file name. Value can be null
|
|
* @type {?string}
|
|
*/
|
|
this.filename = filename;
|
|
|
|
/**
|
|
* Document file size in bytes. Value can be null
|
|
* @type {?number}
|
|
*/
|
|
this.filesize = filesize;
|
|
}
|
|
|
|
/**
|
|
* Creates a MessageMedia instance from a local file path
|
|
* @param {string} filePath
|
|
* @returns {MessageMedia}
|
|
*/
|
|
static fromFilePath(filePath) {
|
|
const b64data = fs.readFileSync(filePath, {encoding: 'base64'});
|
|
const mimetype = mime.getType(filePath);
|
|
const filename = path.basename(filePath);
|
|
|
|
return new MessageMedia(mimetype, b64data, filename);
|
|
}
|
|
|
|
/**
|
|
* Creates a MessageMedia instance from a URL
|
|
* @param {string} url
|
|
* @param {Object} [options]
|
|
* @param {boolean} [options.unsafeMime=false]
|
|
* @param {string} [options.filename]
|
|
* @param {object} [options.client]
|
|
* @param {object} [options.reqOptions]
|
|
* @param {number} [options.reqOptions.size=0]
|
|
* @returns {Promise&lt;MessageMedia>}
|
|
*/
|
|
static async fromUrl(url, options = {}) {
|
|
const pUrl = new URL(url);
|
|
let mimetype = mime.getType(pUrl.pathname);
|
|
|
|
if (!mimetype &amp;&amp; !options.unsafeMime)
|
|
throw new Error('Unable to determine MIME type using URL. Set unsafeMime to true to download it anyway.');
|
|
|
|
async function fetchData (url, options) {
|
|
const reqOptions = Object.assign({ headers: { accept: 'image/* video/* text/* audio/*' } }, options);
|
|
const response = await fetch(url, reqOptions);
|
|
const mime = response.headers.get('Content-Type');
|
|
const size = response.headers.get('Content-Length');
|
|
|
|
const contentDisposition = response.headers.get('Content-Disposition');
|
|
const name = contentDisposition ? contentDisposition.match(/((?&lt;=filename=")(.*)(?="))/) : null;
|
|
|
|
let data = '';
|
|
if (response.buffer) {
|
|
data = (await response.buffer()).toString('base64');
|
|
} else {
|
|
const bArray = new Uint8Array(await response.arrayBuffer());
|
|
bArray.forEach((b) => {
|
|
data += String.fromCharCode(b);
|
|
});
|
|
data = btoa(data);
|
|
}
|
|
|
|
return { data, mime, name, size };
|
|
}
|
|
|
|
const res = options.client
|
|
? (await options.client.pupPage.evaluate(fetchData, url, options.reqOptions))
|
|
: (await fetchData(url, options.reqOptions));
|
|
|
|
const filename = options.filename ||
|
|
(res.name ? res.name[0] : (pUrl.pathname.split('/').pop() || 'file'));
|
|
|
|
if (!mimetype)
|
|
mimetype = res.mime;
|
|
|
|
return new MessageMedia(mimetype, res.data, filename, res.size || null);
|
|
}
|
|
}
|
|
|
|
module.exports = MessageMedia;
|
|
</code></pre>
|
|
</article>
|
|
</div>
|
|
</div>
|
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
|
</div>
|
|
</div>
|
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
|
<div id="jsdoc-footer-container">
|
|
<p>
|
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on January 15, 2023.
|
|
</p>
|
|
</div>
|
|
</footer>
|
|
<script src="scripts/jquery.min.js"></script>
|
|
<script src="scripts/tree.jquery.js"></script>
|
|
<script src="scripts/prettify.js"></script>
|
|
<script src="scripts/jsdoc-toc.js"></script>
|
|
<script src="scripts/linenumber.js"></script>
|
|
<script src="scripts/scrollanchor.js"></script>
|
|
</body>
|
|
|
|
</html> |