Ну, я работаю над музыкальной панелью для клиента, файл загрузки музыки не работает и дает ошибку. < /p>
Audio upload error: TypeError: Cannot read properties of undefined (reading 'pipe')
at C:\Users\nmson\Desktop\xxlclan\node_modules\node-appwrite\lib\services\storage.js:455:25
at new Promise ()
at Storage.createFile (C:\Users\nmson\Desktop\xxlclan\node_modules\node-appwrite\lib\services\storage.js:393:22)
at file:///C:/Users/nmson/Desktop/xxlclan/server/router/upload-music.js:195:23
at Layer.handle [as handle_request] (C:\Users\nmson\Desktop\xxlclan\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\nmson\Desktop\xxlclan\node_modules\express\lib\router\route.js:149:13)
at done (C:\Users\nmson\Desktop\xxlclan\node_modules\multer\lib\make-middleware.js:45:7)
at indicateDone (C:\Users\nmson\Desktop\xxlclan\node_modules\multer\lib\make-middleware.js:49:68)
at Multipart. (C:\Users\nmson\Desktop\xxlclan\node_modules\multer\lib\make-middleware.js:166:7)
at Multipart.emit (node:events:524:28)
< /code>
И я не знаю, что делать. < /p>
Полный код uploadmusic.js < /p>
import express from 'express';
import multer from 'multer';
import { Client, Storage, Databases, ID, InputFile } from 'node-appwrite';
import path from 'path';
import dotenv from 'dotenv';
import { Readable } from 'stream';
dotenv.config();
const router = express.Router();
const DB_ID = process.env.DATABASE_ID;
const COLLECTION_ID = process.env.COLLECTION_ID;
const BUCKET_ID = '';
const client = new Client()
.setEndpoint(process.env.APPWRITE_ENDPOINT)
.setProject(process.env.APPWRITE_PROJECT_ID)
.setKey(process.env.APPWRITE_API_KEY);
const storage = new Storage(client);
const databases = new Databases(client);
const upload = multer({
storage: multer.memoryStorage(),
limits: {
fileSize: 50 * 1024 * 1024, // 50MB limit
},
fileFilter: (req, file, cb) => {
const allowedAudioTypes = ['audio/wav', 'audio/x-wav', 'audio/wave', 'audio/mpeg', 'audio/mp3'];
const allowedImageTypes = ['image/jpeg', 'image/png'];
if (file.fieldname === 'audioFile' && allowedAudioTypes.includes(file.mimetype)) {
cb(null, true);
} else if (file.fieldname === 'artworkFile' && allowedImageTypes.includes(file.mimetype)) {
cb(null, true);
} else {
cb(new Error('Invalid file type'));
}
}
});
router.post('/upload', upload.fields([
{ name: 'audioFile', maxCount: 1 },
{ name: 'artworkFile', maxCount: 1 }
]), async (req, res) => {
res.setHeader('Content-Type', 'application/json');
try {
// Validate files exist
if (!req.files?.audioFile?.[0] || !req.files?.artworkFile?.[0]) {
return res.status(400).json({
success: false,
message: 'Both audio and artwork files are required'
});
}
console.log('Processing upload:', {
timestamp: new Date().toISOString(),
files: {
audio: req.files.audioFile[0].originalname,
artwork: req.files.artworkFile[0].originalname
}
});
const audioFile = req.files.audioFile[0];
const artworkFile = req.files.artworkFile[0];
const audioId = ID.unique();
const artworkId = ID.unique();
try {
await Promise.all([
storage.createFile(BUCKET_ID, audioId, audioFile.buffer, {
contentType: audioFile.mimetype,
filename: audioFile.originalname
}),
storage.createFile(BUCKET_ID, artworkId, artworkFile.buffer, {
contentType: artworkFile.mimetype,
filename: artworkFile.originalname
})
]);
} catch (fileError) {
console.error('File upload error:', fileError);
return res.status(500).json({
success: false,
message: 'Failed to upload files',
error: fileError.message
});
}
// Create database entry
const documentId = ID.unique();
const document = await databases.createDocument(
DB_ID,
COLLECTION_ID,
documentId,
{
// Required fields
releaseTitle: req.body.releaseTitle,
artistName: req.body.artistName,
lyricsLanguage: req.body.lyricsLanguage,
composerName: req.body.composerName,
lyricistName: req.body.lyricistName,
explicitContent: req.body.explicitContent === 'yes',
label: req.body.label,
genre: req.body.genre,
releaseDate: req.body.releaseDate,
// Optional fields
spotifyArtistLink: req.body.spotifyArtistLink || null,
appleMusicArtistLink: req.body.appleMusicArtistLink || null,
featuredArtist: req.body.featuredArtist || null,
spotifyFeaturedLink: req.body.spotifyFeaturedLink || null,
appleMusicFeaturedLink: req.body.appleMusicFeaturedLink || null,
upc: req.body.upc || null,
isrc: req.body.isrc || null,
previewStartTime: req.body.previewStartTime ? parseInt(req.body.previewStartTime) : 0,
additionalNotes: req.body.additionalNotes || null,
// File IDs
audioFileId: audioId,
artworkFileId: artworkId,
// System fields
status: 'pending',
uploadDate: new Date().toISOString(),
lastModified: new Date().toISOString(),
isPublished: false,
// Analytics fields
streams: 0,
revenue: 0,
likes: 0,
shares: 0,
// Metadata
audioFileName: audioFile.originalname,
audioFileSize: audioFile.size,
audioMimeType: audioFile.mimetype,
artworkFileName: artworkFile.originalname,
artworkFileSize: artworkFile.size,
artworkMimeType: artworkFile.mimetype
}
);
return res.status(200).json({
success: true,
message: 'Upload successful',
documentId: document.$id,
files: {
audio: audioId,
artwork: artworkId
}
});
} catch (error) {
console.error('Upload Error:', error);
return res.status(500).json({
success: false,
message: error.message || 'Upload failed',
error: process.env.NODE_ENV === 'development' ? error.stack : undefined
});
}
});
router.post('/audio', upload.single('audioFile'), async (req, res) => {
res.setHeader('Content-Type', 'application/json');
try {
if (!req.file) {
return res.status(400).json({
success: false,
message: 'No audio file provided'
});
}
const audioFile = req.file;
const audioFileId = ID.unique();
// Convert Buffer to Readable Stream
const audioStream = Readable.from(audioFile.buffer);
await storage.createFile(
BUCKET_ID,
audioFileId,
audioStream, // Pass the stream instead of buffer
{
contentType: audioFile.mimetype,
filename: audioFile.originalname,
permissions: ['role:all']
}
);
return res.status(200).json({
success: true,
message: 'Audio file uploaded successfully',
audioFileId: audioFileId,
fileName: audioFile.originalname,
fileSize: audioFile.size,
mimeType: audioFile.mimetype
});
} catch (error) {
console.error('Audio upload error:', error);
return res.status(500).json({
success: false,
message: error.message || 'Failed to upload audio file'
});
}
});
export default router;
< /code>
Я не мог ничего сделать, потому что я не знал, что это приведет к коду. Код сначала проверяет, является ли это правильным аудиофайлом, а затем загружается на идентификатор ведра, сохраняет введенную информацию в DB и да ..
Подробнее здесь: https://stackoverflow.com/questions/794 ... eading-pip
Ошибка загрузки звука: TypeError: не может прочитать свойства неопределенного (чтение «труба») ⇐ Javascript
Форум по Javascript
1738332662
Anonymous
Ну, я работаю над музыкальной панелью для клиента, файл загрузки музыки не работает и дает ошибку. < /p>
Audio upload error: TypeError: Cannot read properties of undefined (reading 'pipe')
at C:\Users\nmson\Desktop\xxlclan\node_modules\node-appwrite\lib\services\storage.js:455:25
at new Promise ()
at Storage.createFile (C:\Users\nmson\Desktop\xxlclan\node_modules\node-appwrite\lib\services\storage.js:393:22)
at file:///C:/Users/nmson/Desktop/xxlclan/server/router/upload-music.js:195:23
at Layer.handle [as handle_request] (C:\Users\nmson\Desktop\xxlclan\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\nmson\Desktop\xxlclan\node_modules\express\lib\router\route.js:149:13)
at done (C:\Users\nmson\Desktop\xxlclan\node_modules\multer\lib\make-middleware.js:45:7)
at indicateDone (C:\Users\nmson\Desktop\xxlclan\node_modules\multer\lib\make-middleware.js:49:68)
at Multipart. (C:\Users\nmson\Desktop\xxlclan\node_modules\multer\lib\make-middleware.js:166:7)
at Multipart.emit (node:events:524:28)
< /code>
И я не знаю, что делать. < /p>
Полный код uploadmusic.js < /p>
import express from 'express';
import multer from 'multer';
import { Client, Storage, Databases, ID, InputFile } from 'node-appwrite';
import path from 'path';
import dotenv from 'dotenv';
import { Readable } from 'stream';
dotenv.config();
const router = express.Router();
const DB_ID = process.env.DATABASE_ID;
const COLLECTION_ID = process.env.COLLECTION_ID;
const BUCKET_ID = '';
const client = new Client()
.setEndpoint(process.env.APPWRITE_ENDPOINT)
.setProject(process.env.APPWRITE_PROJECT_ID)
.setKey(process.env.APPWRITE_API_KEY);
const storage = new Storage(client);
const databases = new Databases(client);
const upload = multer({
storage: multer.memoryStorage(),
limits: {
fileSize: 50 * 1024 * 1024, // 50MB limit
},
fileFilter: (req, file, cb) => {
const allowedAudioTypes = ['audio/wav', 'audio/x-wav', 'audio/wave', 'audio/mpeg', 'audio/mp3'];
const allowedImageTypes = ['image/jpeg', 'image/png'];
if (file.fieldname === 'audioFile' && allowedAudioTypes.includes(file.mimetype)) {
cb(null, true);
} else if (file.fieldname === 'artworkFile' && allowedImageTypes.includes(file.mimetype)) {
cb(null, true);
} else {
cb(new Error('Invalid file type'));
}
}
});
router.post('/upload', upload.fields([
{ name: 'audioFile', maxCount: 1 },
{ name: 'artworkFile', maxCount: 1 }
]), async (req, res) => {
res.setHeader('Content-Type', 'application/json');
try {
// Validate files exist
if (!req.files?.audioFile?.[0] || !req.files?.artworkFile?.[0]) {
return res.status(400).json({
success: false,
message: 'Both audio and artwork files are required'
});
}
console.log('Processing upload:', {
timestamp: new Date().toISOString(),
files: {
audio: req.files.audioFile[0].originalname,
artwork: req.files.artworkFile[0].originalname
}
});
const audioFile = req.files.audioFile[0];
const artworkFile = req.files.artworkFile[0];
const audioId = ID.unique();
const artworkId = ID.unique();
try {
await Promise.all([
storage.createFile(BUCKET_ID, audioId, audioFile.buffer, {
contentType: audioFile.mimetype,
filename: audioFile.originalname
}),
storage.createFile(BUCKET_ID, artworkId, artworkFile.buffer, {
contentType: artworkFile.mimetype,
filename: artworkFile.originalname
})
]);
} catch (fileError) {
console.error('File upload error:', fileError);
return res.status(500).json({
success: false,
message: 'Failed to upload files',
error: fileError.message
});
}
// Create database entry
const documentId = ID.unique();
const document = await databases.createDocument(
DB_ID,
COLLECTION_ID,
documentId,
{
// Required fields
releaseTitle: req.body.releaseTitle,
artistName: req.body.artistName,
lyricsLanguage: req.body.lyricsLanguage,
composerName: req.body.composerName,
lyricistName: req.body.lyricistName,
explicitContent: req.body.explicitContent === 'yes',
label: req.body.label,
genre: req.body.genre,
releaseDate: req.body.releaseDate,
// Optional fields
spotifyArtistLink: req.body.spotifyArtistLink || null,
appleMusicArtistLink: req.body.appleMusicArtistLink || null,
featuredArtist: req.body.featuredArtist || null,
spotifyFeaturedLink: req.body.spotifyFeaturedLink || null,
appleMusicFeaturedLink: req.body.appleMusicFeaturedLink || null,
upc: req.body.upc || null,
isrc: req.body.isrc || null,
previewStartTime: req.body.previewStartTime ? parseInt(req.body.previewStartTime) : 0,
additionalNotes: req.body.additionalNotes || null,
// File IDs
audioFileId: audioId,
artworkFileId: artworkId,
// System fields
status: 'pending',
uploadDate: new Date().toISOString(),
lastModified: new Date().toISOString(),
isPublished: false,
// Analytics fields
streams: 0,
revenue: 0,
likes: 0,
shares: 0,
// Metadata
audioFileName: audioFile.originalname,
audioFileSize: audioFile.size,
audioMimeType: audioFile.mimetype,
artworkFileName: artworkFile.originalname,
artworkFileSize: artworkFile.size,
artworkMimeType: artworkFile.mimetype
}
);
return res.status(200).json({
success: true,
message: 'Upload successful',
documentId: document.$id,
files: {
audio: audioId,
artwork: artworkId
}
});
} catch (error) {
console.error('Upload Error:', error);
return res.status(500).json({
success: false,
message: error.message || 'Upload failed',
error: process.env.NODE_ENV === 'development' ? error.stack : undefined
});
}
});
router.post('/audio', upload.single('audioFile'), async (req, res) => {
res.setHeader('Content-Type', 'application/json');
try {
if (!req.file) {
return res.status(400).json({
success: false,
message: 'No audio file provided'
});
}
const audioFile = req.file;
const audioFileId = ID.unique();
// Convert Buffer to Readable Stream
const audioStream = Readable.from(audioFile.buffer);
await storage.createFile(
BUCKET_ID,
audioFileId,
audioStream, // Pass the stream instead of buffer
{
contentType: audioFile.mimetype,
filename: audioFile.originalname,
permissions: ['role:all']
}
);
return res.status(200).json({
success: true,
message: 'Audio file uploaded successfully',
audioFileId: audioFileId,
fileName: audioFile.originalname,
fileSize: audioFile.size,
mimeType: audioFile.mimetype
});
} catch (error) {
console.error('Audio upload error:', error);
return res.status(500).json({
success: false,
message: error.message || 'Failed to upload audio file'
});
}
});
export default router;
< /code>
Я не мог ничего сделать, потому что я не знал, что это приведет к коду. Код сначала проверяет, является ли это правильным аудиофайлом, а затем загружается на идентификатор ведра, сохраняет введенную информацию в DB и да ..
Подробнее здесь: [url]https://stackoverflow.com/questions/79402988/audio-upload-error-typeerror-cannot-read-properties-of-undefined-reading-pip[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия