只用 url 识别 image/gif 大小
Recognize image/gif size with only url
我希望用户在我的输入中粘贴 link gif 或图像。
例如,用户粘贴此 link:https://media.giphy.com/media/yYSSBtDgbbRzq/giphy.gif
我希望我的应用程序能够识别此 gif 文件是否超过 5MB,而无需下载它。这可能吗?
我在前端使用 Reactjs,在后端使用 nodejs+express
HTTP
协议提供了 HEAD
方法。根据维基百科的 HTTP-article,它与 GET
方法类似,只是它 returns 仅 HTTP-header 而不是数据。
这可能正是您所需要的:发出 AJAX-HEAD-request 而不是 AJAX-GET-request 并从结果中解析图像的预期大小。
我不知道在JS中是如何表述的,但是Linux命令行证明原理是可行的。如果我输入:
curl --head https://media.giphy.com/media/yYSSBtDgbbRzq/giphy.gif
我从服务器收到包含行
的响应
content-length: 2156106
这是你想要的信息。
您可以使用 <input type="file" class="js-file-upload" />
这将使用户能够上传下载的文件或 copy/paste .gif 文件的 link。
之后,您需要从 JS 端检查该文件的大小(如果用户直接粘贴,它将自动上传到用户 PC 的临时文件中 link)。
这是一个简单的例子
const file = document.querySelector('.js-file-upload').files[0];
const fileSize = (file.size/1024/1024).toFixed(2);
const allowedSize = 5;
if (fileSize > allowedSize) {
//print error
}
您只需询问 headers 即可获得内容长度。这是此答案的基于获取的方法:
Ajax - Get size of file before downloading
const getFileSize = async (url) => {
const response = await fetch(url, {method: 'HEAD'})
const size = response.headers.get('content-length')
return size
}
我希望用户在我的输入中粘贴 link gif 或图像。
例如,用户粘贴此 link:https://media.giphy.com/media/yYSSBtDgbbRzq/giphy.gif
我希望我的应用程序能够识别此 gif 文件是否超过 5MB,而无需下载它。这可能吗?
我在前端使用 Reactjs,在后端使用 nodejs+express
HTTP
协议提供了 HEAD
方法。根据维基百科的 HTTP-article,它与 GET
方法类似,只是它 returns 仅 HTTP-header 而不是数据。
这可能正是您所需要的:发出 AJAX-HEAD-request 而不是 AJAX-GET-request 并从结果中解析图像的预期大小。
我不知道在JS中是如何表述的,但是Linux命令行证明原理是可行的。如果我输入:
curl --head https://media.giphy.com/media/yYSSBtDgbbRzq/giphy.gif
我从服务器收到包含行
的响应content-length: 2156106
这是你想要的信息。
您可以使用 <input type="file" class="js-file-upload" />
这将使用户能够上传下载的文件或 copy/paste .gif 文件的 link。
之后,您需要从 JS 端检查该文件的大小(如果用户直接粘贴,它将自动上传到用户 PC 的临时文件中 link)。
这是一个简单的例子
const file = document.querySelector('.js-file-upload').files[0];
const fileSize = (file.size/1024/1024).toFixed(2);
const allowedSize = 5;
if (fileSize > allowedSize) {
//print error
}
您只需询问 headers 即可获得内容长度。这是此答案的基于获取的方法:
Ajax - Get size of file before downloading
const getFileSize = async (url) => {
const response = await fetch(url, {method: 'HEAD'})
const size = response.headers.get('content-length')
return size
}