upd: upload gambar
Deskripsi: - coba upload gambar - nb: blm selesai No Issues
This commit is contained in:
@@ -11,6 +11,13 @@ import { router, Stack } from "expo-router";
|
||||
import { useState } from "react";
|
||||
import { Image, Platform, Pressable, SafeAreaView, ScrollView, Text, View } from "react-native";
|
||||
import { useDispatch } from "react-redux";
|
||||
import * as FileSystem from 'expo-file-system';
|
||||
import axios from "axios";
|
||||
import ReactNativeBlobUtil from 'react-native-blob-util';
|
||||
import FormData from 'form-data';
|
||||
|
||||
const debug = true
|
||||
|
||||
|
||||
export default function CreateBanner() {
|
||||
const { decryptToken, token } = useAuthSession()
|
||||
@@ -20,39 +27,80 @@ export default function CreateBanner() {
|
||||
const [title, setTitle] = useState('')
|
||||
|
||||
const pickImageAsync = async () => {
|
||||
kirim()
|
||||
return
|
||||
let result = await ImagePicker.launchImageLibraryAsync({
|
||||
mediaTypes: ['images'],
|
||||
allowsEditing: false,
|
||||
quality: 1,
|
||||
});
|
||||
|
||||
const formData = new FormData()
|
||||
formData.append('file', result.assets![0].uri)
|
||||
|
||||
if (debug) console.log("[mengirim gambar]")
|
||||
const res = await fetch("http://10.0.2.2:3000/api/v2/test", {
|
||||
method: "POST",
|
||||
body: formData,
|
||||
|
||||
});
|
||||
|
||||
console.log("[res]", await res.json())
|
||||
|
||||
if (debug) console.log("[pickImageAsync]")
|
||||
|
||||
if (!result.canceled) {
|
||||
setSelectedImage(result.assets[0].uri);
|
||||
setImgForm(result.assets[0])
|
||||
if (result.assets?.[0].uri) {
|
||||
// setSelectedImage(result.assets[0].uri);
|
||||
// setImgForm(result.assets[0])
|
||||
|
||||
const formData = new FormData()
|
||||
formData.append('file', result.assets[0].uri)
|
||||
|
||||
if (debug) console.log("[mengirim gambar]")
|
||||
const res = await fetch("http://10.0.2.2:3000/api/v2/test", {
|
||||
method: "POST",
|
||||
body: formData,
|
||||
|
||||
});
|
||||
|
||||
console.log("[res]", await res.json())
|
||||
|
||||
} else {
|
||||
if (debug) console.log("[pickImageAsync]", 'Tidak ada gambar yang dipilih');
|
||||
alert('Tidak ada gambar yang dipilih');
|
||||
}
|
||||
console.log("[imgForm]", imgForm)
|
||||
} else {
|
||||
if (debug) console.log("[pickImageAsync]", 'Tidak ada gambar yang dipilih');
|
||||
alert('Tidak ada gambar yang dipilih');
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
console.log(imgForm)
|
||||
|
||||
|
||||
|
||||
const handleCreateEntity = async () => {
|
||||
const hasil = await decryptToken(String(token?.current))
|
||||
const fd = new FormData()
|
||||
fd.append("file", JSON.stringify({
|
||||
uri: imgForm.uri,
|
||||
type: imgForm.mimeType,
|
||||
name: imgForm.fileName,
|
||||
size: imgForm.fileSize,
|
||||
}))
|
||||
fd.append("data", JSON.stringify(
|
||||
{
|
||||
title: title,
|
||||
user: hasil
|
||||
}
|
||||
))
|
||||
const createdEntity = await apiCreateBanner(fd);
|
||||
// console.log('cliene',createdEntity)
|
||||
// const hasil = await decryptToken(String(token?.current))
|
||||
// const fd = new FormData()
|
||||
|
||||
|
||||
// fd.append("file", JSON.stringify({
|
||||
// uri: imgForm.uri,
|
||||
// type: imgForm.mimeType,
|
||||
// name: imgForm.fileName,
|
||||
// size: imgForm.fileSize,
|
||||
// }))
|
||||
// fd.append("data", JSON.stringify(
|
||||
// {
|
||||
// title: title,
|
||||
// user: hasil
|
||||
// }
|
||||
// ))
|
||||
// const createdEntity = await apiCreateBanner(fd);
|
||||
// console.log("[createdEntity]", createdEntity)
|
||||
// dispatch(addEntity(createdEntity));
|
||||
};
|
||||
|
||||
@@ -89,4 +137,66 @@ export default function CreateBanner() {
|
||||
</ScrollView>
|
||||
</SafeAreaView>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
const requestPermission = async () => {
|
||||
if (Platform.OS !== 'web') {
|
||||
const { status } = await ImagePicker.requestMediaLibraryPermissionsAsync();
|
||||
if (status !== 'granted') {
|
||||
alert('Maaf, kami membutuhkan izin untuk mengakses galeri!');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
|
||||
async function kirim() {
|
||||
const hasPermission = await requestPermission();
|
||||
|
||||
if (!hasPermission) {
|
||||
return;
|
||||
}
|
||||
|
||||
let result = await ImagePicker.launchImageLibraryAsync({
|
||||
mediaTypes: ImagePicker.MediaTypeOptions.Images,
|
||||
aspect: [4, 3],
|
||||
quality: 0.8,
|
||||
});
|
||||
|
||||
if (!result.canceled) {
|
||||
const uri = result.assets[0].uri;
|
||||
console.log("Selected image URI:", uri);
|
||||
|
||||
try {
|
||||
|
||||
const base64Data = await ReactNativeBlobUtil.fs.readFile(uri, 'base64');
|
||||
|
||||
// Convert base64 to Blob
|
||||
const blob = new Blob([base64Data], { type: 'image/jpeg' });
|
||||
|
||||
const formData = new FormData();
|
||||
formData.append('file', blob);
|
||||
formData.append('name', 'bg.png');
|
||||
|
||||
|
||||
console.log("Sending FormData with file URI...");
|
||||
|
||||
// Kirim request tanpa header Content-Type
|
||||
const response = await fetch("http://10.0.2.2:3000/api/v2/test", {
|
||||
method: 'POST',
|
||||
body: formData as any,
|
||||
});
|
||||
|
||||
// console.log("Response status:", response.status);
|
||||
|
||||
} catch (error: any) {
|
||||
console.error('Error uploading image:', error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user