Я провел некоторое время, экспериментируя с этим. Кажется, это похоже на новый API-интерфейс буфера обмена . Вы можете определить обработчик события «paste» и посмотреть на event.clipboardData.items и вызвать getAsFile () на них, чтобы получить Blob. Когда у вас есть Blob, вы можете использовать FileReader на нем, чтобы узнать, что в нем. Вот как вы можете получить URL-адрес данных для материала, который вы только что вставили в Chrome:
// window.addEventListener ('paste', ... или document.onpaste = function (event) {var items = (event.clipboardData || event.originalEvent.clipboardData) .items; console.log (JSON.stringify (items)); // предоставит вам типы mime для (индекс в элементах) {var item = items [index]; if (item.kind === 'file') {var blob = item.getAsFile (); var reader = new FileReader (); reader.onload = function (event) {console.log (event.target .result)}; // data url! reader.readAsDataURL (blob);}}}
После того, как у вас есть URL-адрес данных, вы можете отобразить изображение на странице. загрузите его вместо этого, вы можете использовать readAsBinaryString, или вы можете поместить его в XHR, используя FormData .
Это не очень хорошая идея, но если вы действительно хотите пройти через нее, вы можете попробовать настроить, как показано ниже.
Он должен работать достаточно хорошо в приложении с низким трафиком с одним сервер, но я бы не пробовал ничего подобного с реплицированной или ошпаренной средой или если вы выполняете большое количество вставок.
Создайте отдельную коллекцию для обработки id seqs:
db.seqs.insert({
'collection' : 'admin_collection',
'id' : 0
})
Всякий раз, когда вам нужно вставить новый документ, используйте что-то похожее на это:
def insert_doc(doc):
doc['_id'] = str(db.seqs.find_and_modify(
query={ 'collection' : 'admin_collection' },
update={'$inc': {'id': 1}},
fields={'id': 1, '_id': 0},
new=True
).get('id'))
try:
db.admin_collection.insert(doc)
except pymongo.errors.DuplicateKeyError as e:
insert_doc(doc)
Если вы хотите вручную изменить значение «_id», вы можете сделать это, изменив значение _id в возвращаемом документе. Вы можете сделать это аналогично тому, как вы предложили в своем вопросе. Однако я не думаю, что этот подход рекомендуется.
curs = db.admin_collection.find().sort( [("_id", -1)] ).limit(1)
for document in curs:
document['_id'] = str(int(document['_id']) + 1)
collection.insert(document)
Как правило, не рекомендуется вручную создавать свои собственные идентификаторы. Эти значения должны быть уникальными, и нет гарантии, что str (int (document ['_ id]) + 1) всегда будет уникальным.
Вместо этого, если вы хотите дублировать документ, вы можете удалить '_id' и вставить документ.
curs = db.admin_collection.find().sort( [("_id", -1)] ).limit(1)
for document in curs:
document.pop('_id',None)
collection.insert(document)
Это вставляет документ и позволяет mongo генерировать уникальный идентификатор.