如何确定复制粘贴图像剪贴板的MIME类型?

时间:2015-08-03 14:59:48

标签: javascript macos browser mime

我可以假设Mac OS X剪贴板图像数据是png吗?

当我尝试MIME检测剪贴板数据时,它返回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类型。

1 个答案:

答案 0 :(得分:1)

至少在理论上,不,你不能假设。

这是苹果所说的:“要获取剪贴板上当前可用的类型列表,可以使用clipboardData对象的types属性。此属性包含一个字符串数组,其中包含可用数据的MIME类型。” Webkit DOM Programming Topics

At least according to w3c选项包括:

  • 图像/ PNG
  • 图像/ JPG
  • 图像/ JPEG
  • 图像/ GIF
  • 图像/ SVG + xml的

编辑:

MIME-detect返回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更详细地解释了如何处理这个“任意二进制数据”。