Вы можете получить к нему доступ из paste ClipboardEvent * .clipboardData
DataTransfer .
Это будет в .files
FileList, если доступно:
document.onpaste = (evt) => {
const dT = evt.clipboardData || window.clipboardData;
const file = dT.files[ 0 ];
console.log( file );
};
img{ height: 100vh; }
<div contenteditable>You can paste the image here</div>
<figure>
<figcaption>Copy this image</figcaption>
<img src="https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png">
</figure>
Если вам нужно получить его вне такого события, вам нужно будет использовать асинхронный Clipboard API .
К сожалению, этот API еще не очень хорошо поддерживается (в настоящее время только Blink), но в любом случае, вот как вы можете прочитать файл изображения, используя этот API.
Сначала вам нужно запросить / проверить "clipboard-read"
Разрешение .
Затем, если запрос не был отклонен, вы можете попытаться прочитать все содержимое буфера обмена, вызвав navigator.clipboard.read()
. Это вернет DataTransferItemsList (технически массив), из которого вам все равно придется выбрать тот, который содержит .type
, к которому вы хотите получить доступ.
В вашем случае вы знаете только, что это изображение , но для изображений доступно несколько типов, поэтому вам нужно определить, какой из них используется при выполнении этой проверки.
document.getElementById('btn').onclick = async (evt) => {
const auth = await navigator.permissions.query( { name: "clipboard-read" } );
if( auth.state !== 'denied' ) {
const item_list = await navigator.clipboard.read();
let image_type; // we will feed this later
const item = item_list.find( item => // choose the one item holding our image
item.types.some( type => { // does this item have our type
if( type.startsWith( 'image/' ) ) {
image_type = type; // store which kind of image type it is
return true;
}
} )
);
const file = item && await item.getType( image_type );
console.log( file );
}
};
img{ height: 100vh; }
<button id="btn">read clipboard content</button>
<figure>
<figcaption>Copy this image</figcaption>
<img src="https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png">
</figure>