Я пытаюсь создать новые записи коллекции (коллекция уже создана) из загруженного файла .csv. Это возможно сделать только в страпи?
До сих пор я собрал коллекцию:
{
"kind": "collectionType",
"collectionName": "locations",
"info": {
"singularName": "location",
"pluralName": "locations",
"displayName": "location",
"description": ""
},
"options": {
"draftAndPublish": true
},
"pluginOptions": {},
"attributes": {
"address": {
"type": "text",
"required": true
},
"country": {
"type": "string",
"required": true
},
"city": {
"type": "string",
"required": true
},
"zip": {
"type": "string",
"required": true
}
}
}
и компонент загрузки одного типа, где я разрешаю загружать только CSV-файл.
{
"kind": "singleType",
"collectionName": "loactions-uploads",
"info": {
"singularName": "loactions-upload",
"pluralName": "loactions-uploads",
"displayName": "Loactions-upload"
},
"options": {
"draftAndPublish": true
},
"pluginOptions": {},
"attributes": {
"upload": {
"allowedTypes": [
"files"
],
"type": "media",
"multiple": false
}
}
}
и хук lifecycles.js выглядит так:
const fs = require("fs");
const path = require("path");
const { parse } = require("csv-parse");
module.exports = {
async afterCreate(event) {
const { result } = event;
const file = result.file;
if (!file || file.ext !== ".csv") {
strapi.log.warn("No valid .csv file found.");
return;
}
const filePath = path.join(strapi.dirs.static.public, file.url);
try {
const data = fs.readFileSync(filePath, "utf-8");
// Parse CSV
const records = [];
const parser = parse({ delimiter: ";", columns: true });
parser.write(data);
parser.end();
parser.on("readable", () => {
let record;
while ((record = parser.read())) {
records.push(record);
}
});
await new Promise((resolve, reject) => {
parser.on("end", resolve);
parser.on("error", reject);
});
// Process records and create entries
for (const record of records) {
await strapi.entityService.create("api::location.location", {
data: {
zip: record.ZIP,
address: record.Address,
country: record.Country,
city: record.city,
},
});
}
strapi.log.info(
`Successfully imported ${records.length} entries from CSV.`
);
} catch (err) {
strapi.log.error("Failed to process the CSV file:", err);
}
},
};
когда я загружаю файл, ничего не происходит. Я не вижу новых записей. Почему?
.csv выглядит следующим образом:
ZIP;Address;City;Country;
1010;Seilerstätte 12/1;Vienna;Austria;
1030;Rochusgasse 9/21,Vienna;Austria;
Подробнее здесь: https://stackoverflow.com/questions/793 ... -out-of-it
Можно ли загрузить файл .csv и создать из него записи коллекции? ⇐ Javascript
Форум по Javascript
-
Anonymous
1736750224
Anonymous
Я пытаюсь создать новые записи коллекции (коллекция уже создана) из загруженного файла .csv. Это возможно сделать только в страпи?
До сих пор я собрал коллекцию:
{
"kind": "collectionType",
"collectionName": "locations",
"info": {
"singularName": "location",
"pluralName": "locations",
"displayName": "location",
"description": ""
},
"options": {
"draftAndPublish": true
},
"pluginOptions": {},
"attributes": {
"address": {
"type": "text",
"required": true
},
"country": {
"type": "string",
"required": true
},
"city": {
"type": "string",
"required": true
},
"zip": {
"type": "string",
"required": true
}
}
}
и компонент загрузки одного типа, где я разрешаю загружать только CSV-файл.
{
"kind": "singleType",
"collectionName": "loactions-uploads",
"info": {
"singularName": "loactions-upload",
"pluralName": "loactions-uploads",
"displayName": "Loactions-upload"
},
"options": {
"draftAndPublish": true
},
"pluginOptions": {},
"attributes": {
"upload": {
"allowedTypes": [
"files"
],
"type": "media",
"multiple": false
}
}
}
и хук lifecycles.js выглядит так:
const fs = require("fs");
const path = require("path");
const { parse } = require("csv-parse");
module.exports = {
async afterCreate(event) {
const { result } = event;
const file = result.file;
if (!file || file.ext !== ".csv") {
strapi.log.warn("No valid .csv file found.");
return;
}
const filePath = path.join(strapi.dirs.static.public, file.url);
try {
const data = fs.readFileSync(filePath, "utf-8");
// Parse CSV
const records = [];
const parser = parse({ delimiter: ";", columns: true });
parser.write(data);
parser.end();
parser.on("readable", () => {
let record;
while ((record = parser.read())) {
records.push(record);
}
});
await new Promise((resolve, reject) => {
parser.on("end", resolve);
parser.on("error", reject);
});
// Process records and create entries
for (const record of records) {
await strapi.entityService.create("api::location.location", {
data: {
zip: record.ZIP,
address: record.Address,
country: record.Country,
city: record.city,
},
});
}
strapi.log.info(
`Successfully imported ${records.length} entries from CSV.`
);
} catch (err) {
strapi.log.error("Failed to process the CSV file:", err);
}
},
};
когда я загружаю файл, ничего не происходит. Я не вижу новых записей. Почему?
.csv выглядит следующим образом:
ZIP;Address;City;Country;
1010;Seilerstätte 12/1;Vienna;Austria;
1030;Rochusgasse 9/21,Vienna;Austria;
Подробнее здесь: [url]https://stackoverflow.com/questions/79351336/is-it-possible-to-upload-a-csv-file-and-create-collection-entries-out-of-it[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия