如何确定复制粘贴图像剪贴板的 MIME 类型?
How to determine MIME type of copy-pasted image clipboard?
我可以假设 Mac OS X 剪贴板图像数据是 png 吗?
当我尝试 MIME 检测剪贴板数据时,它 returns application/octet
。
这会导致每个浏览器都下载图像而不是显示图像。
如果我强制内容类型为image/png,一切似乎都很好,但我想知道是否有办法让我不必做出假设?
$log.debug(e.originalEvent.clipboardData);
for (var i = 0; i < e.originalEvent.clipboardData.items.length; i++) {
var item = e.originalEvent.clipboardData.items[i];
$log.info("Item type: " ,item);
if (item.type.indexOf("image") != -1) {
$scope.token.images = [];
$log.debug(item.getAsFile(), {});
...
我使用 https://github.com/broofa/node-mime 检测 MIME 类型。
至少在理论上,不,你不能假设。
Apple 是这样说的:“要获取剪贴板上当前可用的类型列表,您可以使用 clipboardData 对象的类型 属性。此 属性 包含一个字符串数组与可用数据的 MIME 类型。” Webkit DOM Programming Topics
- image/png
- image/jpg
- image/jpeg
- image/gif
- image/svg+xml
编辑:
MIME 检测 returns application/octet
的原因是您使用的库在不知道类型时回退到那个 as you can see in this line of the test.js file:
assert.equal('fallback', mime.charsets.lookup('application/octet-stream', 'fallback'));
This answer 更详细地解释了如何处理这种“任意二进制数据”。
我可以假设 Mac OS X 剪贴板图像数据是 png 吗?
当我尝试 MIME 检测剪贴板数据时,它 returns application/octet
。
这会导致每个浏览器都下载图像而不是显示图像。
如果我强制内容类型为image/png,一切似乎都很好,但我想知道是否有办法让我不必做出假设?
$log.debug(e.originalEvent.clipboardData);
for (var i = 0; i < e.originalEvent.clipboardData.items.length; i++) {
var item = e.originalEvent.clipboardData.items[i];
$log.info("Item type: " ,item);
if (item.type.indexOf("image") != -1) {
$scope.token.images = [];
$log.debug(item.getAsFile(), {});
...
我使用 https://github.com/broofa/node-mime 检测 MIME 类型。
至少在理论上,不,你不能假设。
Apple 是这样说的:“要获取剪贴板上当前可用的类型列表,您可以使用 clipboardData 对象的类型 属性。此 属性 包含一个字符串数组与可用数据的 MIME 类型。” Webkit DOM Programming Topics
- image/png
- image/jpg
- image/jpeg
- image/gif
- image/svg+xml
编辑:
MIME 检测 returns application/octet
的原因是您使用的库在不知道类型时回退到那个 as you can see in this line of the test.js file:
assert.equal('fallback', mime.charsets.lookup('application/octet-stream', 'fallback'));
This answer 更详细地解释了如何处理这种“任意二进制数据”。