مشكلة تحديد اسم جديد للملف المحمل في اضافة التحميل في ionic
بصور الكود وابغاكم تجدون حل للمشكلة هذه داخل كودي بس عشان اوضح المشكلة
filetransfer.download(ur',path,"1.mp4")
هذه الاضافة في اخر مدخل تجعلني اختار اسم للملف المنزل. انا ابغاه بنفس اسمه كيف اسويها؟ عندي الوضع معقد شوي فبرسل الكود عشان لو بسوي تعديل هنا لازم اعدل اماكن ثانية.
هنا عندي video.ts ويكون فيه تحميل الفيديوهات والتحقق من وجودها بالسيرفر وهو ياخذ روابط الفيديوهات واسماءها الجديدة من ملف ثاني يكون dictanaiory لكل عنصر اسم الفيديو ووصف لها ورابط تنزيله.
import { Injectable } from '@angular/core';
import { FileTransfer, FileTransferObject } from '@ionic-native/file-transfer';
import { File, Flags, DirectoryEntry } from '@ionic-native/file';
import videos from './videoLinks';
@Injectable()
export class VideoProvider {
flags: Flags;
constructor(
private file: File,
private transfer: FileTransfer
) { }
/**
* @description get videos by indicating a set
* @param {number} set
*/
get(set: number) {
return new Promise<any>((resolve, reject) => {
let result = [];
Promise.all([videos[set].map((video) => {
this.fetch(video)
.then((file) => result.push({ metadata: video, file: file }))
.catch(err => console.log(err));
})]).then(res => resolve(result));
});
}
/**
* @description fetch a single video
* @param {string} url
*/
private fetch(video) {
return new Promise<any>((resolve, reject) => {
this.file.checkFile(this.file.externalDataDirectory, video.name)
.then(exists => {
// fetch file from storage
this.file.resolveDirectoryUrl(this.file.externalDataDirectory)
.then((directoryEntry: DirectoryEntry) => {
this.file.getFile(directoryEntry, video.name, this.flags)
.then(fileEntry => resolve(fileEntry))
.catch(err => console.log(err));
});
})
.catch(err => {
// download file
const fileTransfer: FileTransferObject = this.transfer.create();
fileTransfer.download(video.url, this.file.externalDataDirectory + video.name).then((entry) => {
this.save(video.name, entry);
resolve(entry);
}).catch(err => console.log(err));
});
});
}
/**
* @description save a video
* @param {string} url
*/
private save(name: string, file) {
this.file.writeFile(this.file.dataDirectory, name, file, { replace: true })
.catch(err => console.log(err));
}
}
مثال للdictionary
{
'name': 'video1.mp4',
'videoName':'مقطع',
'description':'description',
'url': 'https://drive.google.com/uc?export=download&id=1JadFckYy--LJDl_NfZMuiBnrymCJa-Nt'
},
الicon اللي اذا ضغطته يحمل الفيديوهات اتوقع انه مهم
<div class="video-block" (click)="play()">
<ion-card text-center>
<p>{{video.metadata.videoName}}</p>
<p>{{video.metadata.description}}</p>
<ion-icon name="play"></ion-icon>
</ion-card>
</div>
كود دالة play
import { Component, Input } from '@angular/core';
import { StreamingMedia, StreamingVideoOptions } from '@ionic-native/streaming-media';
@Component({
selector: 'video-play',
templateUrl: 'video.html'
})
export class VideoComponent {
@Input() video: any;
constructor(private streamingMedia: StreamingMedia) {
}
/**
* @description play video on media stream player
*/
play() {
let options: StreamingVideoOptions = {
successCallback: () => { console.log('Video played') },
errorCallback: (e) => { console.log(e) },
shouldAutoClose: true,
controls: true
};
this.streamingMedia.playVideo(this.video.file.nativeURL, options);
}
}
اخر كود موجود عندي
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { VideoProvider } from '../../providers/video/video';
@IonicPage({
name: 'GradePage'
})
@Component({
selector: 'page-grade',
templateUrl: 'grade.html',
})
export class GradePage {
videos: any = [];
constructor(
public navCtrl: NavController,
public navParams: NavParams,
public video: VideoProvider
) {
}
ionViewDidLoad() {
let grade = this.navParams.get('grade');
this.getVideos(grade);
}
/**
* @description fetch videos by indicating a set
* @param {number} set
*/
getVideos(set: number) {
this.video.get(set)
.then(videos => { this.videos = videos; console.log(this.videos) })
.catch(err => console.log(err));
}
}
ساعد بالإجابة
"إن في قضاء حوائج الناس لذة لا يَعرفها إلا من جربها، فافعل الخير مهما استصغرته فإنك لا تدري أي حسنة تدخلك الجنة."
الإجابات (1)
راجعت التوثيق بموقع ionic بالنسبه لاستخدام File Transfer لتحميل ملفات انت تحتاج تحدد الاسم في ثاني مدخل مع مسار حفظ الملف داخل المشروع هنا مثال من موقعهم
download() {
const url = 'http://www.example.com/file.pdf';
fileTransfer.download(url, this.file.dataDirectory + 'file.pdf').then((entry) => {
console.log('download complete: ' + entry.toURL());
}, (error) => {
// handle error
});
}
شفت الكود عندك انت تقريبا مستخدم نفس الشي فما ادري وين الخطا الي يطلع لك او المشكلة وين بالضبط
انت تستخدم card زي ماهو موضح بسؤالك لتشغيل الفيديو كل الي عليك تعدل الدالة play عشان تقبل الفيديو وتقدر توصل لاسم الفيديو ومعلوماته بسهولة باذن الله
<div class="video-block" (click)="play(video)">
<ion-card text-center>
<p>{{video.metadata.videoName}}</p>
<p>{{video.metadata.description}}</p>
<ion-icon name="play"></ion-icon>
</ion-card>
</div>
وغير الدالة عندك عشان تقبل المدخل وتعامل معه بيكون عندك اسم الفيديو والرابط وغيرها
انا ماعرف كيف انت منفذ المشروع ولكن ممكن تورينا طريقة عمل الدالة play لما ينضغط على الزر اش يصير بالضبط لو تحط الكود نقدر نساعدك تعدل عليه
زياد العتيبي: المشكلة ان عدد الفيديوهات عندي كبير وانا ابغ احملهم واخذ عناوينهم بنفس الوقت. مو لازم العناوين بس فعلا الروابط كل شوي انسخ والصق. انا رافع الفيديوهات في قوقل درايف وماخذ رابط مباشر لكل فيديو بس عملية متعبة عندي 400 فيديو تقريبا مع نسخ العناوين لان العناوين موجود في قوقل درايف كاسماء للفيديوهات انا ابغ اجيبها في التطبيق. لو شفت <p>{{video.metadata.videoName}}</p> موجودة في card حقة عرض الفيديوهات يمديني اغيرها واخلبها لاسماء الفيديوهات بس ما اعرف اجلب الاسماء
Ali Majrashi: في card عندك لما يضغط يتم تنفيذ الدالة play() غيرها وخليها تقبل مدخل الفيديو الي فيه معلومات الفيديو بغير تعليقي فوق واضيف كود card بالداله والمدخل
زياد العتيبي: اضفت كود دالة play فوق.
Ali Majrashi: معليش زياد بعذبك معي هذا مسؤل عن تشغيل الفيديو اذا ممكن تحط الكود المسؤل عن تحميل الفيديو لو ضغط المستخدم ايضا كود html الي فيه زر التحميل مو التشغيل
زياد العتيبي: غريبة اللكود الثاني اللي حطيته الطويل هو حق تحميل الفيديو. ما بقى عندي الا كود واحد في المشروع وبحطه في الاخير وخلاص هذه كل الاكواد الموجودة عندي اظن
زياد العتيبي: اذا ما ساعد اعطيني يوزرك بgithub اسويلك invite تشوف الكود وتقولي عن المشكلة.
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !