API Images
API Quản Lý Hình Ảnh
1. Upload Hình Ảnh
Mô tả
Upload hình ảnh lên server, hỗ trợ upload file thực tế (form-data) và upload qua URL (JSON).
Endpoint, Method, Authentication
POST https://your-domain.com/api/v1/data-images/upload
Authentication: Bearer token
Authorization: Bearer YOUR_TOKEN_HERE
Tham số
Tên | Kiểu | Bắt buộc | Mô tả |
---|---|---|---|
images[] | File | Có | File ảnh upload (form-data) |
category_id | Integer | Có | ID danh mục |
Hướng dẫn sử dụng & Response
Hướng dẫn Postman:
- Body > form-data
- Thêm nhiều trường
images[]
(kiểu File) - Thêm trường
category_id
(kiểu Text) - Headers:
Authorization: Bearer YOUR_TOKEN_HERE
Ví dụ curl:
curl -X POST https://your-domain.com/api/v1/data-images/upload \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-F "images[]=@/path/to/image1.jpg" \
-F "images[]=@/path/to/image2.png" \
-F "category_id=1"
Response thành công:
{
"status": "success",
"message": "Upload thành công 2 hình ảnh",
"data": {
"uploaded": [
{
"original_name": "image1.jpg",
"url": "https://your-domain.com/uploads/image1.jpg"
},
{
"original_name": "image2.png",
"url": "https://your-domain.com/uploads/image2.png"
}
],
"errors": []
}
}
Hướng dẫn Postman:
- Body > raw > JSON
- Headers:
Authorization: Bearer YOUR_TOKEN_HERE
Ví dụ curl:
curl -X POST "https://your-domain.com/api/v1/data-images/upload" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-H "Content-Type: application/json" \
-d '{
"category_id": 1,
"images": [
"https://kktt.kklogin.xyz/image/products/1283/683966e1741f7.jpg",
"https://kktt.kklogin.xyz/image/products/1282/683966df50c81.jpg"
]
}'
Response thành công:
{
"status": "success",
"message": "Upload thành công 2 hình ảnh",
"data": {
"uploaded": [
{
"original_name": "683966e1741f7.jpg",
"url": "https://your-domain.com/uploads/683966e1741f7.jpg"
},
{
"original_name": "683966df50c81.jpg",
"url": "https://your-domain.com/uploads/683966df50c81.jpg"
}
],
"errors": []
}
}
Cấu hình HTTP Request Node:
- URL:
https://your-domain.com/api/v1/data-images/upload
- Method:
POST
- Send Body:
true
- Body Type:
JSON
hoặcform-data
- Headers:
Authorization: Bearer YOUR_TOKEN_HERE Content-Type: application/json
- Body (JSON):
{ "category_id": 1, "images": [ "https://kktt.kklogin.xyz/image/products/1283/683966e1741f7.jpg", "https://kktt.kklogin.xyz/image/products/1282/683966df50c81.jpg" ] }
Lưu ý: Thay thế YOUR_TOKEN_HERE
, category_id
, và danh sách images
bằng giá trị thực tế của bạn.
Code mẫu
const uploadImages = async (categoryId, imageUrls, token) => {
try {
const response = await fetch('https://your-domain.com/api/v1/data-images/upload', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
category_id: categoryId,
images: imageUrls
})
});
const result = await response.json();
if (result.status === 'success') {
console.log(result.message);
result.data.uploaded.forEach(image => {
console.log(`- Uploaded: ${image.original_name} -> ${image.url}`);
});
if (result.data.errors.length > 0) {
console.log('Errors:', result.data.errors);
}
}
return result;
} catch (error) {
console.error('Lỗi khi upload hình ảnh:', error);
throw error;
}
};
// Sử dụng
const imageUrls = [
'https://kktt.kklogin.xyz/image/products/1283/683966e1741f7.jpg',
'https://kktt.kklogin.xyz/image/products/1282/683966df50c81.jpg'
];
uploadImages(1, imageUrls, 'YOUR_TOKEN_HERE');
const axios = require('axios');
const uploadImages = async (categoryId, imageUrls, token) => {
try {
const response = await axios.post(
'https://your-domain.com/api/v1/data-images/upload',
{
category_id: categoryId,
images: imageUrls
},
{
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
}
);
const result = response.data;
if (result.status === 'success') {
console.log(result.message);
result.data.uploaded.forEach(image => {
console.log(`- Uploaded: ${image.original_name} -> ${image.url}`);
});
}
return result;
} catch (error) {
console.error('Lỗi khi upload hình ảnh:', error.response?.data || error.message);
throw error;
}
};
// Sử dụng
const imageUrls = [
'https://kktt.kklogin.xyz/image/products/1283/683966e1741f7.jpg',
'https://kktt.kklogin.xyz/image/products/1282/683966df50c81.jpg'
];
uploadImages(1, imageUrls, 'YOUR_TOKEN_HERE');
function uploadImages($categoryId, $imageUrls, $token) {
$url = 'https://your-domain.com/api/v1/data-images/upload';
$data = [
'category_id' => $categoryId,
'images' => $imageUrls
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $token,
'Content-Type: application/json'
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Sử dụng
$imageUrls = [
'https://kktt.kklogin.xyz/image/products/1283/683966e1741f7.jpg',
'https://kktt.kklogin.xyz/image/products/1282/683966df50c81.jpg'
];
$result = uploadImages(1, $imageUrls, 'YOUR_TOKEN_HERE');
if ($result['status'] === 'success') {
echo $result['message'] . "\n";
foreach ($result['data']['uploaded'] as $image) {
echo "- Uploaded: " . $image['original_name'] . " -> " . $image['url'] . "\n";
}
}
2. Xóa Hình Ảnh
Mô tả
Xóa một hình ảnh theo tên file trong một danh mục cụ thể.
Endpoint, Method, Authentication
DELETE https://your-domain.com/api/v1/data-images/
Authentication: Bearer token
Authorization: Bearer YOUR_TOKEN_HERE
Tham số (body JSON)
Tên | Kiểu | Bắt buộc | Mô tả |
---|---|---|---|
category_id | Integer | Có | ID danh mục |
file_name | String | Có | Tên file cần xóa (có đuôi) |
Hướng dẫn sử dụng & Response
Hướng dẫn Postman:
- Method:
DELETE
- Body > raw > JSON
- Headers:
Authorization: Bearer YOUR_TOKEN_HERE
Ví dụ curl:
curl -X DELETE "https://your-domain.com/api/v1/data-images/" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-H "Content-Type: application/json" \
-d '{
"category_id": 3,
"file_name": "1.png"
}'
Response thành công:
{
"status": "success",
"message": "Đã xóa hình ảnh thành công"
}
Response lỗi (không tìm thấy hình):
{
"status": 400,
"error": 400,
"messages": {
"status": "failed",
"code": "IMAGE_NOT_FOUND",
"message": "Không tìm thấy hình ảnh với tên file này"
}
}
Cấu hình HTTP Request Node:
- URL:
https://your-domain.com/api/v1/data-images/
- Method:
DELETE
- Send Body:
true
- Body Type:
JSON
- Headers:
Authorization: Bearer YOUR_TOKEN_HERE Content-Type: application/json
- Body:
{ "category_id": 3, "file_name": "1.png" }
Lưu ý: file_name
phải đúng tên file (bao gồm cả đuôi mở rộng, ví dụ: 1.png
)
Code mẫu
const deleteImage = async (categoryId, fileName, token) => {
try {
const response = await fetch('https://your-domain.com/api/v1/data-images/', {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
category_id: categoryId,
file_name: fileName
})
});
const result = await response.json();
if (result.status === 'success') {
console.log(result.message);
} else {
console.error(result.messages?.message || 'Xóa hình thất bại');
}
return result;
} catch (error) {
console.error('Lỗi khi xóa hình ảnh:', error);
throw error;
}
};
// Sử dụng
deleteImage(3, '1.png', 'YOUR_TOKEN_HERE');
const axios = require('axios');
const deleteImage = async (categoryId, fileName, token) => {
try {
const response = await axios.delete('https://your-domain.com/api/v1/data-images/', {
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
data: {
category_id: categoryId,
file_name: fileName
}
});
const result = response.data;
if (result.status === 'success') {
console.log(result.message);
} else {
console.error(result.messages?.message || 'Xóa hình thất bại');
}
return result;
} catch (error) {
console.error('Lỗi khi xóa hình ảnh:', error.response?.data || error.message);
throw error;
}
};
// Sử dụng
deleteImage(3, '1.png', 'YOUR_TOKEN_HERE');
function deleteImage($categoryId, $fileName, $token) {
$url = 'https://your-domain.com/api/v1/data-images/';
$data = [
'category_id' => $categoryId,
'file_name' => $fileName
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $token,
'Content-Type: application/json'
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Sử dụng
$result = deleteImage(3, '1.png', 'YOUR_TOKEN_HERE');
if ($result['status'] === 'success') {
echo $result['message'] . "\n";
} else {
echo $result['messages']['message'] . "\n";
}
3. Lấy Hình Ảnh Ngẫu Nhiên
Mô tả
Trả về một hình ảnh ngẫu nhiên trong một danh mục cụ thể.
Endpoint, Method, Authentication
GET https://your-domain.com/api/v1/data-images/random?category_id=6
Authentication: Bearer token
Authorization: Bearer YOUR_TOKEN_HERE
Tham số (query)
Tên | Kiểu | Bắt buộc | Mô tả |
---|---|---|---|
category_id | Integer | Có | ID danh mục |
Hướng dẫn sử dụng & Response
Hướng dẫn Postman:
- Method:
GET
- Params >
category_id=6
- Headers:
Authorization: Bearer YOUR_TOKEN_HERE
Ví dụ curl:
curl -X GET "https://your-domain.com/api/v1/data-images/random?category_id=6" \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
Response thành công:
{
"status": "success",
"url": "https://kktt.kklogin.xyz/image/images/20250615/52bf2135d0cda8cba445dd430d612dfc7538.png",
"used": 1,
"category_id": "3",
"approve": "1",
"original_name": "42.png",
"file_name": "52bf2135d0cda8cba445dd430d612dfc7538.png",
"file_size": "152119",
"file_type": "image/png"
}
Response lỗi (không có hình):
{
"status": 400,
"error": 400,
"messages": {
"status": "failed",
"code": "NO_IMAGES",
"message": "Không tìm thấy hình ảnh nào"
}
}
Cấu hình HTTP Request Node:
- URL:
https://your-domain.com/api/v1/data-images/random
- Method:
GET
- Query Parameters:
category_id: 6
- Headers:
Authorization: Bearer YOUR_TOKEN_HERE
Lưu ý: category_id
phải là ID hợp lệ của danh mục hình ảnh.
Code mẫu
const getRandomImage = async (categoryId, token) => {
try {
const response = await fetch(`https://your-domain.com/api/v1/data-images/random?category_id=${categoryId}`, {
method: 'GET',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
});
const result = await response.json();
if (result.status === 'success') {
console.log('URL:', result.url);
console.log('Tên gốc:', result.original_name);
} else {
console.error(result.messages?.message || 'Không tìm thấy hình ảnh');
}
return result;
} catch (error) {
console.error('Lỗi khi lấy hình ảnh random:', error);
throw error;
}
};
// Sử dụng
getRandomImage(6, 'YOUR_TOKEN_HERE');
const axios = require('axios');
const getRandomImage = async (categoryId, token) => {
try {
const response = await axios.get(
'https://your-domain.com/api/v1/data-images/random',
{
params: { category_id: categoryId },
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
}
);
const result = response.data;
if (result.status === 'success') {
console.log('URL:', result.url);
console.log('Tên gốc:', result.original_name);
} else {
console.error(result.messages?.message || 'Không tìm thấy hình ảnh');
}
return result;
} catch (error) {
console.error('Lỗi khi lấy hình ảnh random:', error.response?.data || error.message);
throw error;
}
};
// Sử dụng
getRandomImage(6, 'YOUR_TOKEN_HERE');
function getRandomImage($categoryId, $token) {
$url = 'https://your-domain.com/api/v1/data-images/random?category_id=' . $categoryId;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $token,
'Content-Type: application/json'
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Sử dụng
$result = getRandomImage(6, 'YOUR_TOKEN_HERE');
if ($result['status'] === 'success') {
echo "URL: " . $result['url'] . "\n";
echo "Tên gốc: " . $result['original_name'] . "\n";
} else {
echo $result['messages']['message'] . "\n";
}
4. Tìm Kiếm Hình Ảnh Theo Tên
Mô tả
Tìm kiếm hình ảnh theo tên gốc (original_name) trong một danh mục cụ thể.
Endpoint, Method, Authentication
GET https://your-domain.com/api/v1/data-images/find-by-name/?category_id=3&search=60
Authentication: Bearer token
Authorization: Bearer YOUR_TOKEN_HERE
Tham số (query)
Tên | Kiểu | Bắt buộc | Mô tả |
---|---|---|---|
category_id | Integer | Có | ID danh mục |
search | String | Có | Từ khóa tìm kiếm |
Hướng dẫn sử dụng & Response
Hướng dẫn Postman:
- Method:
GET
- Params >
category_id=3
,search=60
- Headers:
Authorization: Bearer YOUR_TOKEN_HERE
Ví dụ curl:
curl -X GET "https://your-domain.com/api/v1/data-images/find-by-name/?category_id=3&search=60" \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
Response thành công:
{
"status": "success",
"data": [
{
"id": "209",
"file_name": "b7586425b6065b2b4bfd49f5692c3a697542.png",
"category_id": "3",
"original_name": "60.png",
"sub_folder": "20250615",
"file_size": "162793",
"file_type": "image/png",
"width": "500",
"height": "500",
"approve": "1",
"updated_at": "2025-06-15 06:50:40",
"url": "https://kktt.kklogin.xyz/image/images/20250615/b7586425b6065b2b4bfd49f5692c3a697542.png"
}
],
"total": 1,
"message": "Tìm thấy 1 hình ảnh"
}
Response lỗi (không tìm thấy):
{
"status": "error",
"message": "Tham số không hợp lệ",
"errors": {
"category_id": "Category ID là bắt buộc",
"search": "Từ khóa tìm kiếm là bắt buộc"
}
}
Cấu hình HTTP Request Node:
- URL:
https://your-domain.com/api/v1/data-images/find-by-name/
- Method:
GET
- Query Parameters:
category_id: 3 search: 60
- Headers:
Authorization: Bearer YOUR_TOKEN_HERE
Lưu ý: Thay thế YOUR_TOKEN_HERE
, category_id
, và search
bằng giá trị thực tế của bạn.
Code mẫu
const searchImages = async (categoryId, searchTerm, token) => {
try {
const response = await fetch(
`https://your-domain.com/api/v1/data-images/find-by-name/?category_id=${categoryId}&search=${encodeURIComponent(searchTerm)}`,
{
method: 'GET',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
}
);
const result = await response.json();
if (result.status === 'success') {
console.log(`Tìm thấy ${result.total} hình ảnh`);
result.data.forEach(image => {
console.log(`- ${image.original_name}: ${image.url}`);
});
}
} catch (error) {
console.error('Lỗi khi tìm kiếm hình ảnh:', error);
}
};
// Sử dụng
searchImages(3, '60', 'YOUR_TOKEN_HERE');
const axios = require('axios');
const searchImages = async (categoryId, search, token) => {
try {
const response = await axios.get(
'https://your-domain.com/api/v1/data-images/find-by-name/',
{
params: {
category_id: categoryId,
search: search
},
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
}
);
const result = response.data;
if (result.status === 'success') {
console.log(`Tìm thấy ${result.total} hình ảnh`);
result.data.forEach(image => {
console.log(`- ${image.original_name}: ${image.url}`);
});
}
return result;
} catch (error) {
console.error('Lỗi khi tìm kiếm hình ảnh:', error.response?.data || error.message);
throw error;
}
};
// Sử dụng
searchImages(3, '60', 'YOUR_TOKEN_HERE');
function searchImages($categoryId, $search, $token) {
$url = 'https://your-domain.com/api/v1/data-images/find-by-name/?category_id=' . $categoryId . '&search=' . urlencode($search);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $token,
'Content-Type: application/json'
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Sử dụng
$result = searchImages(3, '60', 'YOUR_TOKEN_HERE');
if ($result['status'] === 'success') {
echo "Tìm thấy " . $result['total'] . " hình ảnh\n";
foreach ($result['data'] as $image) {
echo "- " . $image['original_name'] . ": " . $image['url'] . "\n";
}
}