Trent Larson
9 months ago
7 changed files with 118 additions and 3 deletions
@ -0,0 +1,89 @@ |
|||||
|
<template> |
||||
|
<!-- CONTENT --> |
||||
|
<section id="Content" class="p-6 pb-24 max-w-3xl mx-auto"> |
||||
|
<!-- Breadcrumb --> |
||||
|
<div class="mb-8"> |
||||
|
<!-- Back --> |
||||
|
<div class="text-lg text-center font-light relative px-7"> |
||||
|
<h1 |
||||
|
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" |
||||
|
@click="$router.back()" |
||||
|
> |
||||
|
<fa icon="chevron-left" class="fa-fw"></fa> |
||||
|
</h1> |
||||
|
</div> |
||||
|
|
||||
|
<!-- Heading --> |
||||
|
<h1 id="ViewHeading" class="text-4xl text-center font-light pt-4"> |
||||
|
Photo |
||||
|
</h1> |
||||
|
</div> |
||||
|
<div v-if="localImageUrl"> |
||||
|
Dude, you got an image! Dude, you got an image! |
||||
|
</div> |
||||
|
<div v-else> |
||||
|
<camera |
||||
|
:resolution="{ width: 375, height: 812 }" |
||||
|
facingMode="user" |
||||
|
autoplay |
||||
|
ref="camera" |
||||
|
> |
||||
|
<button @click="storeImage">I'm on top of the video</button> |
||||
|
</camera> |
||||
|
</div> |
||||
|
</section> |
||||
|
</template> |
||||
|
|
||||
|
<script lang="ts"> |
||||
|
import axios from "axios"; |
||||
|
import Camera from "simple-vue-camera"; |
||||
|
import { Component, Vue } from "vue-facing-decorator"; |
||||
|
|
||||
|
interface Notification { |
||||
|
group: string; |
||||
|
type: string; |
||||
|
title: string; |
||||
|
text: string; |
||||
|
} |
||||
|
|
||||
|
@Component({ components: { Camera } }) |
||||
|
export default class GiftedPhoto extends Vue { |
||||
|
$notify!: (notification: Notification, timeout?: number) => void; |
||||
|
|
||||
|
localImageUrl: string | null = null; |
||||
|
|
||||
|
async storeImage(/* payload: MouseEvent */) { |
||||
|
const cameraComponent = this.$refs.camera as InstanceType<typeof Camera>; |
||||
|
const blob = await cameraComponent?.snapshot(); |
||||
|
if (!blob) { |
||||
|
this.$notify( |
||||
|
{ |
||||
|
group: "alert", |
||||
|
type: "danger", |
||||
|
title: "Error", |
||||
|
text: "There was an error taking the picture. Please try again.", |
||||
|
}, |
||||
|
-1, |
||||
|
); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
//this.localImageUrl = URL.createObjectURL(blob); |
||||
|
|
||||
|
console.log("Got an image:", blob?.size); |
||||
|
|
||||
|
const formData = new FormData(); |
||||
|
formData.append("image", blob, "snapshot.jpg"); |
||||
|
try { |
||||
|
const response = await axios.post( |
||||
|
"http://localhost:3000/image", |
||||
|
formData, |
||||
|
); |
||||
|
|
||||
|
console.log("Upload successful", response.data); |
||||
|
} catch (error) { |
||||
|
console.error("Error uploading the image", error); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
Loading…
Reference in new issue