MERN Stack Tutorial: Upload & Download files from MongoDB database

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hello everyone this is Murat and today we are going to build a full stack application that will enable us to upload and download files from mongodb database this will be a Monster tutorial so mongodb Express reacts and node.js this will be the end result I know it's not the prettiest application but what we are looking for is that whether it works or not and what do we want here we want to add a name and a file and it should be able to like it should be added to the database and then we want to retrieve it and download it so let's my newest new new item and for files it's me choose yeah I'm going to choose this one so I edits I couldn't add why that's wrong oh okay name could not be more than 20 characters sorry about that that this is something I gave and forgot yes now that means 200 to 201 means it's success then if I refresh I will see the new file newest item I can download it I downloaded it here show all downloads it's here with opening here it won't open in here it opens somewhere else I'm gonna show you it opens here so we have it here anyway let's start so yeah um in this tutorial I'm going to show you how to do this and while this might seem easy it was not I mean I don't think it's easy because in order to do this we have to create an Express server um we have to connect to mongodb database we have to use the motor middleware with express.js to send the files and then using blobs we have to download it on our front end and in whilst doing that we we will have to I mean we don't have to but we will follow and we see model will view controller pattern so it will be a good tutorial I hope I mean I I enjoyed if I can say that learning that stuff doing that stuff I had to do it for a client uh like the uh the the need was that my client had an application which had different users and those users were communicating with my client through some files and they were putting files in there uploading files in there accounts and my client was a should be able to should have been able to uh download those files for his business to continue so this was one uh real life application of this process and let me see kills oh my God yeah I had some problems problems with my Local Host before this tutorial this is my take to I'm a little bit tired because of that I made a mistake on my first tutorial but this time it's gonna be okay I'm closing this we don't need this anymore because we have seen this is this is what we are going to build no where am I no man yes I'm here I want to create a new file mongodb file this will be and I will see it into it here I will create two folders yeah not file folder mongodb folder uh file folder API and client why because API will contain my backends logic and client will contain my front-end logic I CD into API and creates oh yeah just sets I have to rewrite many things yes now I will need some packages you know in order uh to build this logic this application I will need to install Express that's on me Mongols course and uh malter yes anything else I don't think so let's let's see let's wait for them to uh download it ah it was here okay okay that's nice so but I I don't want to be here I want to open the application in here um voila see there download it we are here foreign okay and before starting my application create a mix.js file because this is our main files file I like to create some scripts because I want to yeah no no no there is no Source or whatever makes Shield now what is this another one what is this node you know these are the scripts like I want to start my server using these scripts like npm run they should fire nodemon index.js and what is nodemon and why don't we have it in here Norman is an is a package that enables enables you to watch a node server without interruption normally uh like I have it globally downloaded globally but if you don't you will have to install it in your API folder like npm I an old one I don't need to do it because I have it globally so that's what it is without further Ado let's start guitar Express server let's yeah const this you know const Express require Express and you know I have my second screen here so I can be a copycat looking at there you know const up Express const dot Envy config you will see uh in a minute how we are gonna use this and how useful how important it is um okay not now um const I'm gonna do it in here well I like to use uh course packaging and my applications with like I I don't even know if it's necessary here I don't care like I just want to show that you can use it for what's cross for scripting something something course I don't care um uh fuse Express Json yes now excuse me what is this what is this digital okay now let's try I will explain npm round there abusing is not a function abuse okay typo of course and listen on part 3000 let's check three thousands I shall see a hello world there yes we are connected to our server so we have an Express server up and running that's what we wanted so here I'm using this so that I can send you some uh in my application and here it sends to base URL hello world like you have done it like this go back refresh hello worlds yes but no we are going to use this one so there are certain things I have to do right now like sorry what that must be really annoying sound um well I have to connect to a database I have to connect to mongodb database for this I I will use mongodb Atlas so I will be needing some connection script I have to write something to my application also as I said before I will use MVC model view controller pattern so I will have to create some files some folders for them too also I will need an uploads folder because like I need to upload the files uh somewhere so I like to create uh the folders beforehand if I know which folders I'm gonna use and it in this case I know so I'm still in the API with PWD command I can see where I am making um TV yes wonderful so these are the folders that we will use in this application I will use controllers models and routes for MVC pattern uploads for files middleware for middleware and db4 database tuck as you can see Behavior now in database I will create a connect GS file now the thing is actually I don't need to I don't have to create any of these folders or and put and separate my code you know I can just tuck everything in to my index.js but that will be really ugly and difficult to read and that will be a scene so I won't do that it's called separation of concerns so if it's about controllers I will put it in controls folder if it's about database I will put database Etc and so on and so on now I mean did we did we install Mongoose yes everything is fine now what's what's that oh my God yeah um now I will call Mongoose here Mongoose is a enables us to communicate with mongodb very easily I'm putting this that this is not that important yes connect DB not async this is no man I don't want an async function I I just want to put an URL and that this is an arrow function so or wrong return Mongoose connects URL pack that's all log connected to mongodb Atlas so that I can see if it's connected or not you know attack did I miss anything I don't think so oh model exports connectivity so with this I should be able to using this script I should be able to connect to my database and we'll see how now inside you know API is my backend logic you remember client is my front-end logic so in the root of my API I'm going to create a new file that's envy and the moment I created that tnu file I will create a DOT git ignore file and write node modules and that's Enemy Inside why well this that bit ignore file makes sure that the uh the files or folders I have written here want to be pushed to GitHub because as you will see soon that if I'm pushing the dot DMV file to GitHub like then there is no reason for me to use a DOT EnV file at all so this this is very important I shall never ever push my datiana file to GitHub I have done it uh but I mean no he said Abby now I have to make some changes in my index.js file I have to import the connect DB that's const connects TV from yes require yes yes yes and I'm gonna change this you know right now after this change I I will I will do something else because right now we have a database I have to start initiate the database there so I'm going to yes exactly I'm going to do that I'm going to create a oh my God create a start function and I'm going to choose a try catch blue could you please give me the try catch block no okay don't give it okay you don't give it you know your deal well I don't use promises I hate promises I always use try cash block because it's much much much better in my opinion so try catch we have an error here try to console love error attack and we have to because this is a function now we have to call it otherwise it wouldn't work what did I do here awaits connect DB process and we dot EnV mongodb URI what is this it's won't do anything because there is no such thing so what's going on here what is going on here is that I told you about this amplifier right and right now we are trying to connect to our database so I have to go to my database um this is my mongodb database I am not uh going to show you how to uh how to uh create a mongodb cluster mongodb database and some because that's that just takes too much time you know not that it's difficult it's not difficult it just takes uh time because like it's couple of clicks but it takes time for mongodb to create a cluster and I don't want to do that right now so I just assume that you have a mongodb database up and running so this is another tutorial about creating a mongodb database you can find lots of tutorials about that but I will just show you how we can connect it so this is my database I press connects it will give me these choices I say connect your application copy this I copied it close go back to my enemy file I will write I will create a variable I will pass this and the thing is okay I will show you some cool tricks cool things now I want to give a name to my collection I can I can create the name name of my collection here between the Slash and the integration Mark what should our collection be I will say to why why because this is take two I I made a mistake in the first one so yeah so you can name it whatever you want here I will need to give my username and password I'm just going to write tests and tests and after this tutorial I will delete the access of these two uh to make sure that everything is in order so you will have to write your own uh username and password Here um I save I go back let's close our server so what's gonna happen let's see connected to mongodb Atlas server is listening on Port 3000 voila so what happened here here in this async starts function I'm calling the connect DB a function that I have written here you know Mongoose connect URL you see and for the URL I'm passing the URI a variable that I have uh written here URI as you can see in order for uh in order to read dot EnV files I have to write it like that process.tnv and I have to import the tnv with config like this cons.e and we require Dot envy.configs parenthesis and it works I mean I guess it works it should work it says that it's working but we are going to see like when when we try to add files to it okay anyway now we think we hope that we are connected to mongodb so now it's time to put some files some items some some data into mongodb database you know like that's what I what we need to do right now and if you remember uh from the project demo that I showed at the beginning we had an item uh we could enter a name of course it will create an ID by itself and we could uh enter like upload a files so to do that we will need to create a schema in models like this is how you do it in and we see pattern and it's working now I will create an item item s file I will yeah I will call Mongoose require Mongols cons items schema new schema I always like to close this because then things gets kind of annoying name well because as I said as we have seen we will need a name and a file so name what will be the type string required yes trim unique Anna no no okay that's that's enough like the thing uh you know um at first we had some problems uh entering the name that was because of this oh you know I can give these options Max lands can be 20 and I will get this errors on my console so okay let's let's do it like this and now after the name we will need a file type string yes yes yes and that's all now I have to export this no model exports so we are exporting this schema as item um now what we have to do well we have our model I think what we have to do is create a controller and write our API endpoints and our logic what we want to do with this schema let's do that or maybe do I have to um I'm thinking do I have to write the middleware beforehand we will write the middleware uh just whilst doing this okay let's start a new file everything is in orders in control no I want this to be controllers controllers yes new file items yes okay now first I have to require my schema schema that's I've just created so um I think I will also need Pat will I yes I will need a pet module for from node.js for my file this is a core model so I don't have to install anything for it it's just included in mongodb um so what do I need I need it you know this is where we write our API so well at first in our application we solve a lot of items so I think I need an endpoint for getting all the items I want to add an item and I want to download a file so I have to edit this so let's start with get items and here I'm gonna show you a little bit tricks and stuff and like that let's write const get items async require response obviously try catch why why aren't you suggesting me my try catch block I want hate this okay oh my God try I can't even write a try cash block what I'm trying to do like so just create this all together and if you cannot write it try catch um const items Echoes awaits item and no not like that and yeah this this is what's going to be now it's all cool it's all nice I have my try catch block and I can write all my all my controllers like this but but I mean in this application it's okay you know because I will just write three controllers but say I have lots of lots of controllers lots of lots of logic so writing this strike H logic might get a little bit annoying and here I'm going to show you a trick I've learned from Maximilian schwartzmuller sorry if I pronounce his name wrong let's go to our middleware folder and create and async wrapper yes what are we going to do let's see const a sync wrapper equals Laura oh my God return I think yes try cage obviously catch error try it's working did I make something wrong did I forget something yeah what happened there it gets quite annoying at any moment I'm just gonna copy paste yes well what's going on here so I'm writing the uh asynchrade here and I'm passing the function that I want to use here so that's in my controllers I won't have to write asyncavate all over again I will just grab them with this async wrapper function and I'm exporting it so I can go back to my items and cons async wrapper I record it now let's see what I'm going to do I'll go I will create an add item because I want to add items const adds item no no no no that asynchrick no sync wrapper yes then I think now I can just get to name from right buddy well what are we doing here we are destructuring we are taking the name from right buddy because this is the request buddy so it's basically what we will enter uh in our request um yeah and uh yeah I will need shall I do that now let's not okay just let's let's do it why not why not I mean why not let's write the multi middleware to let's do everything yeah and yes problem yeah there is a problem here what did I do wrong I always do something wrong of course of course of course no as usual I have to export these get items I like them okay it's all good now I will write the download file you will see how each of these parts will end up together I know this is kind of scattered but like this is how it's done at least this is how I learned it uh let's download file a sync wrappers yes now const ID reg params here I need the ID that this ID will be created by mongodb itself so I don't have to create a schema for it I need the ID because I need to know which file what file I'm going to download so const item awaits item find by ID if item doesn't exist yeah that's actually return next yeah yeah yeah all good yes so if the item is isn't found we are going to return an error um const file item dot file now post file that is not GS stuff Pat join their name here it should be here right file uh it should be around here like it should be correct we will see that join we will see I'm like this is this I I didn't know about this uh rest download uh before doing this project I was actually first I I wanted to dress download was suggested to me by GitHub co-pilot first I I downloaded I um I installed an MPA npm package called mime types and I used it like mine lookup file set header and so on and so on and it it works fine and then copilot just suggested me that there is this too and it works fine okay like this is our controllers right now it seems weird what are these what the hell is this I mean what's gonna happen that in our roots we are going to Define our endpoints like you know I mean localhost to 3000 slash say uh create item add item get items etc etc and in our routes I will call uh you know Roots we will call these functions so these are like this is how they work let me show you let me show you we go to our Roots I know if you don't know the MVC pattern which I'm not an expert of at first it's kind of confusing how they all fit together but after a couple of applications you you understand okay this is this is much easier than putting everything in one place in index yes that's that's that that will be madness madness I say that was the uh that was saved by what was the main character in That 70s Show Eric Foreman he was saying that okay items in in Roots we are going to create another itemsjs file and now I need sorry now I need to yeah now I need to use the multi reader middleware okay sorry about that we are we are going to come back to routes but first we will need to write some very ugly quote okay are you ready I'm not malter GS so what is malters see so this is the we installed it you know and we cannot see anything can we can we reach anything yes uh let's see uploading files which is primary primarily used for uploading files we need malter without motor I have no idea how I will do this honestly I have no idea maybe I should speak louder it's 1am in the morning I'm I'm trying to do a tutorial while I'm doing what I'm doing with my life I don't know I just like it I guess I just like this kind of stuff let's go back yes we are here now const motor requires me I wonder what require malter one figures how the files are stored con storage multi disk storage yes yes destination function wreck file CB means callback foreign to store the file which I'm writing this so that you can follow callback null uploads so we are going to store our files in this uploads folder that we have created at the beginning this this is why we created this it's empty right now because we haven't added any uh files into it but that's uh how it goes file name yes callback CB just wonderful just wonderful what is wrong why what okay I will you know you know what I will do I always make some mistakes here on F of course um const file filter now actually we don't need this but I want to add this so that I can show you that we have this option like we can choose uh what type of files we want to accept and in our application I just want to accept jpeg PNG pen again and PDF so like if you try to upload a txt or markton or ePub or like something anything other than PDF uh JPEG and PNG it will reject so if file oh mine type yeah it's better I don't write them one by one I'm just gonna copy paste because this is just annoying I'm so I'm sorry not sorry like this is what we are doing if the file name type isn't jpeg or you know this means or PNG or application PDF reject that's that's it and now we have to write an upload function no no no no no yeah limits yes I will need some limits how easy it looks right oh my God this is what programming like this this is a very easy programmers like programming life is extremely easy you just click like everything is giving you by the AI and so on and so on and you just have to you just need to click enter and all is done I wish it was like this the the thing is I mean if you have been watching my tutorial so far you know before creating these tutorials I create an application like the same application more or less and since I I write call I write to code my vs code as far as I understand it works like this it sees the code that it it interfere it infers that I'm gonna use the same thing because I'm following the same path so well right now we we wrote Our multi-functionality you know and we just need to upload uh we just need to export the upload function because we don't we don't need we need to upload them you know like they they are just being used by the upload function so we are just exporting to uploads it's all good this is our multi middleware let's go to Our Roots now we can write our notes rods roots const uploads we have just written this require middleware melter wonderful const Express require Express um did I export them yes now I have to import them because I need this you know the the only reason I'm creating these roots like differently is because I don't want to clutter my code I just want to get these functions and put them into endpoints that's that's all I want to do in life like that's that's it I just I just want to get this I just want to get these functions that's that's enough and this is how we just structure it require controllers items I have my functions now I will need the router too because we are rooting yes now we're to root oh my God it directly sees you know I'm checking the code I've written uh on my second screen so that I I don't want to make any crazy mistakes whilst the recording the tutorial uh but it always amazes me how co-pilot takes exactly uh what I've written what are we doing here if uh on this means that it's the root if on localhost 3000 I call uh I send a get request it will let me open this to the right yeah oh my God this means that if on localhost 2000 I send a get request it will fire the get items function if at the same route localhost 3000 beige root base URL I send a post request it will fire the add item function and it will use uh the upload function that we have defined in multi middleware here so that we can upload files you know now realtor roots yeah um because I want to do it like this if I go to localhost 3000 slash download slash the idea of the item it will fire the function like and post it and fire a get request uh it will fire the download file function now I have to export by router 2y because I will have to go back to my express.js ah my indexed yes sorry and well use this you know but to use them I have to require them and items router require Roots items like m not this the one just we have created here I'm requiring this because I just exported it because I need it um up use yes exactly and do I need anything else no well what is this why I'm writing API version one items well um this is like a convention you know this is the my API this is version one I don't have to write this uh but I mean why not I mean let's follow the best practices as much as we can and what does it mean here like I have written items well in this application it doesn't make much sense because we only have one controller one schema etc etc but imagine an application I have many controllers many models schemas many routes etc etc say I have items and say I have users okay I have a schema for users controllers functions for users etc etc then um I will create a app use API version one users uh endpoint so to differentiate between them when I write this when I write this here and call these items router it means that whenever I go whenever I go to this localhost 3000 API uh Slash version one slash items this is the base URL so that's uh so this this base URL is now this and when I want to download I have I will have to write API version one item slash download slash ID well it should work right now but we have to try we don't know let's first see if yeah everything seems fine but I mean we have to see uh well we don't have a uh front end right now so what I'm going to do I'm going to use Postman uh you see well I've already created a collection and some requests here in YouTube mongodb collection so we are going to use it let's let's add an item so you see localhost 3000 API version B version one items I was gonna say version beer which is uh beer means one in Turkish my mother tongue sometimes it just snaps back the mother tongue okay um it's a post request so I I need to enter some things what do I need to enter let's go and check what was we had a name and we had a file Well normally I will choose application Json but since we I'm going to add file I will be using I will be using form data you know normally I will choose if there was no file I will choose raw and Json but uh I'm going to do that right now sum files yeah let's see uh I didn't explain sorry um well this is our name field here red body and serve file field we need this we need the keys to be named and file because we have defined them as such in our uh schema uh if I wrote something else it wouldn't work but let's see I don't know pump if it's gonna work or not no it didn't work why uh reading paths interesting I don't know why it didn't work you know what I need a break and let me pause it a little bit and I will see why it didn't work and I will get back to you in a minute hello again I took my break um well of course it didn't work because the file that I was trying to send didn't exist because I've deleted it so I just you see we have a success here I'm going to show you again um in Postman I can choose file or text in from data I'm choosing file yeah um I'm going to choose this Virgo sign and now I don't believe in astrology I just created an application about astrology that's why I have the images anyway I sent the post request and it returns a success let's let's check if if everything went okay or not let's browse my collections what what does the name of uh mongodb file to talk to items I have two items because I posted two items wonderful now let's see if I can get items so localhost 3000 API version one items Sands I have my items let me try to download one of them so we want version one items download and ID what's gonna happen and Bam you know everything is working seamlessly right now this means that this picture is this image has been downloaded let's let's try with the second ID so you'll see like it's working right now I'm the best bomb but I mean right now our backend is done like this is this this is all we are not gonna do anything else on the back end so if you are not interested in how we are gonna actually uh download uh retrieve the file you can cut the tutorial short but don't do it because why I mean let's let's see how we are gonna do it let's close this we don't need this anymore we are done you know that's that's enough now I will just what I'm going to do well working yeah what I want to do is I want to create a react application I will go to clients npm in it with latest I'm going to use wheat instead of create reactor because wheat is faster I like with and this dot uh forward slash backward slash I don't know this means that you know normally uh when you say right MPX create react app after after the command you write the name of the folder that you want the project to be created in but if you write this this means that create the project in this very folder which is empty right now so well it will be reacts JavaScript pump see mpm install no it's blazing fast I don't know how good is it for production but for development it's wonderful I like with npm run Dev let's go here and we have our width application running wonderful let's go to our client our SRC folder Source folder oh by the way I forgot to show you something you know uh we uploaded some files right now uh we we have our uploads folder in the API and we have our uploaded files here and it's cool I mean this is why we had our uploads fire anyway um foreign now I will do some some things here let me see I'm Gonna Change I'm just going to check what I have been doing with my styling I put a little bit styling well first of all I'm not going to use the index CSS I don't want it pump also I'm not going to use that that's that's that's not gonna wait wait wait wait I want to copy this and FC wonderful just wonderful and I'm going to delete everything sorry mate I don't need your styling mom I have a empty I have an empty application so um um now it's the front end part first first first I just want to add this uh here in my app CSS it's not important I will just create a class add items and I will put this uh flexbox commands there it's not important this is not a CSS course is you remember there's not much CSS at all so this is all about how we can get how we can gets fire how we can download it so well we will need some hooks we will need few States we will need use effect and we will need use ref I'll see why and oh we will need axios because I like axios amp we are here right yeah npm e axios axios is like a fetching Library I mean we could use the built-in fetch API also but I like axios better um I will start by defining some States you know const items set items use State yes cons I don't even know if I will use it but let's let's put it columns file input ref equals use ref null const name set name you step now let me write my functions no no no no no no no no that's not how we are going to rule lights let's write our functions I'm tired sorry I'm really tired maybe I should next time I shall break the tutorial into pieces const get items equals async function please give me my try catch please give my track Edge set loading true try yes it gave me my try catch song log air now what I'm going to do well basically I'm going to send the get request to this others that's that's what I'm going to do constrace equals no not fetch axios gets attack um set items race data items Li for one know that this is the way you have to do it and I want to console log console log rest of the items um and let yeah let's get items into here and let's see how it's gonna be if it's working or not axis is not defined of course it's not defined I didn't import access import access now you cannot use if you use it if you don't Define it and we have our items here what's going on here what is this what what's going on you know what what did I do here I I sent a get request using get items function and with user fake I'm calling the get items uh function at component amount that's user effect that's I like use I think it's it's quite cool now I want to add item const add item sync yes of course I think that's prevents default please I I don't want any refresh yes try catch try catch now I yes well do you remember how did we um add an item you know we used form data right yeah so we need to we need to say that from the type and name name yes formula to appends now this this is our file file input rev current files at zero this is our our file can't stress Avid access pause local assembly work is it is it correct no is it let's see yeah yeah it seems right and I want to see the rest okay let's see rest data if it's gonna I want to see the rest man that's what I want now the Tricky Tricky Tricky trick part download file this is really ugly called you know really really really ugly chords do I no I I want to I want to write file now I want my try catch now what I'm going to do well I'm going to send a guest request but this is kind of a different get request because like how the hell I'm going to get the file it's it's not a string it's uh I need to use something for it you know I cannot just make a get request and luckily there's something I can use let's first send our request you know const press oh wait axios gets what was I uh let me just copy now you see what is this um this is the file ID I could have written ID here let's actually let's do that why not why not let's change this to ID how did I do that how did I do that um in vs code if you press Ctrl and keep pressing it and if you like if you when you are selecting something and if you press Ctrl and D the letter D it will go and try to find the exact same uh string and then you can do something with all of them it's quite easy and not easy sorry quite useful now all good I I have to add something here this is this is very important I I have to add a response type blob I need bloop what is blob what is blob let's see The Blob object represents a blob which is a fire like object of immutable rail data now so this is this is very very useful and we are going to use it here foreign no I'm sorry this is not how we are going to write it we are going to write it as such type race data type because I want to give the type myself that's what I want const link I need to link to my const link because we need to download it link href We Know URL create object URL blob yeah correct link download wow no no no no no okay let's let's try normally normally well I must this is what I done beforehand but let's let's try what's gonna happen I don't know let's let's trust uh topical pilot now you know do you remember the flexbox thingy that I shot in fcss this is it's coming to this wrapper and items what do I need to add here I need an input to enter the name I need an input to enter the file and I need a button to add the uh input or at the item now I wanted a placeholder placeholder add name on change yes attack set name a Target value so this is uh like each time whenever each time the the value changes it will set the state so I'm still thinking how am I going to edit this video I don't know how to edit you know I don't know that's yeah well uh you do you remember the file input ref here well we are using it uh in our uh file input here that's how it goes and I need a button and click add item so right now it should work let's see um some some yeah well whatever no something else yes let's see oh my God I got an axious error I don't know why what the hell was that oh my God what was that I don't know I honestly don't know let's maybe it was the the problem was here what was that um okay um unexpected Field tonight let's just watch okay I'm gonna I'm gonna take a break and check what is the problem and I will back real quick yep I found where the problem was sometimes I I I Tire myself a lot you know well we don't have an image Fields it's it should be filed that's why there is a problem see right now we are getting a success it's wonderful anyway let's go back to our chords now well we can upload stuff but I want to also be able to download them wait wait wait wait wait just Waits now um you know I set the items when I get them set items the rest the items so I want to I would like to show them you know on the page but uh in order to do that without problem I first want to make sure that they are here arrived and then I'm gonna map like so attack no hate whenever this happens confuses me you know each and every time yes syntax of JavaScript it's like one my like my you're gonna do that um nope I did not like what you have shown me we need keys uh for each react mapped elements item Plus underscore ID this underscore ID is coming from mongodb database itself H3 item all along yeah and under it's button in some words file yeah I'm so tired guys sorry and it's getting too hot in here next time I'm going to I'm going to divide the tutorial into size chunks like bite chunks download file Jim that's ID it's okay all good and what I'm doing on click I'm going to download file function which is here and I'm passing the ID of the item the mapped item so that I will download that's one functions are not um probably I have made a mistake here because I'm tired tired tired so tired yes here are on summer probably I made a mistake let's see Hollywood no so this is the latest version I don't know what I did wrong here same item what did I Wrong what did I did wrong turn on click everything seems fine but I don't know um and I'm too tired to find out like this is the correct version okay I'm gonna put this on GitHub so you'll see let's try I'm tired um moon logo and success I'm tired this year download file we have downloaded the latest file here yes okay that's it it was a long tutorial I got tired I was already tired I hope I was able to of something useful I hope you got something from this um let's meet next time and let's make some better tutorial next time so take care ciao
Info
Channel: Murat Can Yüksel
Views: 3,700
Rating: undefined out of 5
Keywords:
Id: -2YZRa3pMac
Channel Id: undefined
Length: 71min 2sec (4262 seconds)
Published: Tue Feb 14 2023
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.