-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
121 lines (119 loc) · 3.71 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
const fs = require("fs");
const FormData = require("form-data");
const axios = require("axios");
class ImageStorage {
constructor() {
this.options = {};
}
option(options) {
if (!options.api_url || !options.api_key) {
throw new Error("api_url та api_key обов'язкові параметри");
}
this.options = options;
}
async getImage(fileName) {}
async uploadImage(file) {
try {
const isCorrectImage = await this.checkFile(file);
if (isCorrectImage.success) {
const form = new FormData();
form.append("file", fs.createReadStream(file.path), file.originalname);
const response = await axios.post(this.options.api_url, form, {
headers: {
"x-api-key": this.options.api_key,
"Content-Type": "multipart/form-data",
},
});
const { success, image_name, message } = response.data;
return { success: success, image_name: image_name, message: message };
} else {
return {
success: isCorrectImage.success,
message: isCorrectImage.message,
};
}
} catch (err) {
console.log(err);
return false;
}
}
async deleteImage(delete_fileName) {
try {
if (delete_fileName) {
const deleteResponse = await axios.delete(
`${this.options.api_url}/${delete_fileName}`,
{
headers: {
"x-api-key": this.options.api_key,
},
}
);
const { success, message } = deleteResponse.data;
return { success: success, message: message };
} else {
return { success: false, message: "Необхідно передати назву файла" };
}
} catch (err) {
console.log(err);
return false;
}
}
async updateImage({ update_fileName, file }) {
try {
const isCorrectImage = await this.checkFile(file);
if (isCorrectImage.success && update_fileName) {
const deleteResponse = await this.deleteImage(update_fileName);
console.log(deleteResponse.success);
if (deleteResponse.success) {
const uploadResponse = await this.uploadImage(file);
if (uploadResponse.success)
return {
success: true,
message: "Зображення успішно змінено",
image_name: uploadResponse.image_name,
};
} else {
return {
success: false,
message: `Не знайдено зображення з назвою "${update_fileName}" для заміни`,
};
}
} else {
return {
success: isCorrectImage.success,
message: `${isCorrectImage.message}${
update_fileName ? "" : ", Введіть назву зображення для заміни"
}`,
};
}
} catch (err) {
console.log(err);
return err;
}
}
async checkFile(file) {
try {
if (file && file.path) {
if (file.mimetype.startsWith("image/")) {
return { success: true, message: "Файл правильний" };
} else {
return {
success: false,
message: `Файл повинен бути типу \"image\". Тип файлу: ${
file.mimetype.split("/")[0]
}`,
};
}
} else {
return {
success: false,
message: "Необхідно додати файл або неправильно передані дані",
};
}
} catch (err) {
console.log(err);
return { success: false, message: "Сталась помилка" };
}
}
}
module.exports = new ImageStorage();