Передача блоб-изображения в django rest framework с помощью ajax
У меня есть html-страница, которая позволяет пользователю сделать снимок экрана с камеры. Этот снимок экрана затем отображается на странице с помощью функции из main.js, приведенной ниже.
Если я делаю console.log(image), я получаю тег изображения с src на blob:http, который содержит изображение.
Теперь о самом интересном. Я хочу отправить это изображение на мой api в django rest framework.
В принципе, как мне перейти от изображения в блобе к запросу post к api?
Я пытался использовать $.ajax, но я не знаю, как форматировать "blob data", чтобы принять его для поля параметра "data:" в ajax.
Обратите внимание, что я не использую формы в html, когда я делаю это, html страница обновляется, как только я делаю скриншот, поэтому изображение не остается на странице...
Если мне придется использовать формы, чтобы заставить это работать, пожалуйста, дайте мне знать, и я попробую другой подход.
main.js
async function grabFrame() {
const img = await imageCapture.grabFrame();
const url = URL.createObjectURL(await imageCapture.takePhoto());
document.querySelector("img").src = url
#id_image is where the screenshot is located
const image = document.getElementById('id_image')
console.log(image)
index.html
<button onclick="grabFrame()">Grab Frame</button>
<img id="id_image" style="width:320px; height:240px"/>
models.py
class Image(models.Model):
image = models.ImageField(upload_to='media/')
serializer.py
class ScreenshotCreateSerializer(ModelSerializer):
class Meta:
model = Image
fields = [
'image'
]
views.py
class SaveScreenshot(CreateAPIView):
serializer_class = ScreenshotCreateSerializer
permission_classes = [AllowAny]
def home_view(request):
return render(request, 'index.html', {})
что я пробовал в main.js
// $.ajax({
// url: "/api/save_screenshot",
// type: "POST",
// processData: false,
// mimeType: "multipart/form-data",
// contentType: false,
// data: blob data?,
// success: function (data) {
// alert("Screenshot saved successfully!");
// },
// error: function (e) {
// console.log(e);
// }
// }).done(function(o) {
// });