• 1397/04/21

وب سرویس برای آپلود فایل :

سلام و خسته نباشید جناب قربانی عزیز

ممنون بابت آموزش عالی و پرانرژیتون 

میخواستم بپرسم آیا میتونم با nodeJS وب سرویسی بنویسم که توی برنامم (با mvc) بتونم صداش بزنم و یه فایل رو روی سرور آپلود کنم یا از سرور دانلود کنم؟

اگر شدنیه ممنون میشم راهنماییم کنید 

 

با سپاس فراوان

  • 1397/04/21
  • ساعت 16:16

با سلام 

خواهش میکنم 

بله چرا نشه و اینکه میتونی فایل هم آپلود کنی . یه نگاهی به لینک زیر بندازی با استفاده از ماژول Express FileUpload میشه انجام داد.

https://www.npmjs.com/package/express-fileupload


  • 1397/04/22
  • ساعت 01:01

سلام و تشکر بابت راهنمایی 

خیلی تلاش کردم اما نرسیدم به سرمنزل مقصود، برای همین دوباره مزاحمتون شدم

طبق لینکی که داده بودید پیش رفتم، وقتی میخوام فایل و بفرستم سمت سرور به این ارور میخوره

با انواع روشهای ajax پیش رفتم، حتی جالبه توی مرورگر نشون میده که عکس رفته سمت سرور ولی اونور گویا نمیتونه بگیردش!

TypeError: Cannot read property mv of undefined
        at c:\IAS\MyNode\uploadserver.js:36:12
        at Layer.handle [as handle_request] (c:\IAS\MyNode\node_modules\express\lib\router\layer.js:95:5)
        at next (c:\IAS\MyNode\node_modules\express\lib\router\route.js:137:13)
        at Route.dispatch (c:\IAS\MyNode\node_modules\express\lib\router\route.js:112:3)
        at Layer.handle [as handle_request] (c:\IAS\MyNode\node_modules\express\lib\router\layer.js:95:5)
        at c:\IAS\MyNode\node_modules\express\lib\router\index.js:281:22
        at Function.process_params (c:\IAS\MyNode\node_modules\express\lib\router\index.js:335:12)
        at Busboy.next (c:\IAS\MyNode\node_modules\express\lib\router\index.js:275:10)
        at Busboy.emit (events.js:187:15)
        at Busboy.emit (c:\IAS\MyNode\node_modules\busboy\lib\main.js:38:33)</pre>

اینم کد سرور:

const express = require('express');
const fileUpload = require('express-fileupload');
const fs = require('fs');

const app = express();
 

app.use((req, res, next) => {
    let now = new Date().toString();
    let log = `${now} : ${req.method} ${req.url}`;

    //console.log(log);
    fs.appendFile('server.log', log + '\n', (err) => {
        if (err) {
            console.log('Unable to append to server.log');
        }
    });
    next();
});


// default options
app.use(fileUpload());
 
app.post('/api/upload', function(req, res) {
    res.header('Access-Control-Allow-Origin', "*");
  if (!req.files)
     res.status(400).send('No files were uploaded.');
 
  // The name of the input field (i.e. "sampleFile") is used to retrieve the uploaded file
  let sampleFile = req.files[0];
 
  // Use the mv() method to place the file somewhere on your server
  
//console.log(sampleFile.name);
sampleFile.mv('/somewhere/on/your/server/filename.jpg', function(err) {
    if (err)
      return res.status(500).send(err);
 
    res.send('File uploaded!');
  });
});

app.listen(4000, function(a) {
    console.log("Listening to port 4000");
});

 

اینم صدازدن توسط ajax:

            var data = new FormData();

            var files = $("#IdentityDocumentPic").get(0).files;

            // Add the uploaded image content to the form data collection
            if (files.length > 0) {
                data.append("IdentityDocumentPic", files[0]);
            }

            // Make Ajax request with the contentType = false, and procesDate = false
            var ajaxRequest = $.ajax({
                type: "POST",
                url: "localhost:4000/api/Upload/",
                contentType: false,
                processData: false,
                data: data
            });

 

ببخشید که زیاد شد، خیلی تلاش کردم که خودم بتونم ولی نشد :(


  • 1397/04/22
  • ساعت 10:25

به به

خسته نباشی دلاور

 

خوب من خودم تست کردم و کدی که نوشتم کار میکنه و کد منو ببین تا بدونی کجای کارت میلنگه

 

const express = require('express');
const fileUpload = require('express-fileupload');
const path = require('path');

const app = express();

app.use(fileUpload());
app.use(express.static(__dirname + '/public'));
app.post('/upload', (req, res) => {
    if (!req.files) {
        return res.status(400).send('There is no file');
    }

    let example = req.files.example;
    let fileName = req.files.example.name;

    example.mv(path.join(__dirname, `img/${fileName}`) , (err) => {
        if (err) {
            return res.status(500).send();
        }

        res.send('File uploaded');
    })
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

 

و اینم کدی اچ تی ام الی که درون فولدر public  به عنوان index.html نوشتم

 

<html>
  <body>
    <form ref='uploadForm' 
      id='uploadForm' 
      action='http://localhost:3000/upload' 
      method='post' 
      encType="multipart/form-data">
        <input type="file" name="example" />
        <input type='submit' value='Upload!' />
    </form>     
  </body>
</html>

 

خوب فقط سرور رو اجرا کن یک عکس انتخاب کن و آپلود رو بزن

یادت نره فولدر img رو توی روت پروژت بسازی

مشکلی بود باز در خدمتم

موفق باشی


  • 1397/04/24
  • ساعت 23:24

یک دنیا ممنون آقای قربانی عزیز 

حل شد، هم روش شماجواب داد هم این بین با multer هم آشنا شدم :)

باورم نمیشه که تونستم یه هفته نشده اولین کار اجرایی با node js انجام بدم 

اینو مدیون آموزشای کاربردی شما هستم واقعا ممنون

 


  • 1397/04/25
  • ساعت 09:49

نظر لطفتونه

انشاالله که همیشه موفق باشید.


  • 1397/08/28
  • ساعت 13:46

سلام در حد پیشنهاد من برای آپلود از این ماژول استفاده کردم که کارش هم خوب بود:

https://www.npmjs.com/package/formidable


  • 1399/01/13
  • ساعت 02:34

سلام استاد 

سال نو مبارک 

استاد من می خواهم با برنامه اندروید که نوشتم عکس را به سرورم اپلود کنم خیلی سرچ زدم ولی جوابی که میخواستم را پیدا نکردم 

لطفا اگه راهی وجود دارد راهنمایی کنید 🙏🙏


logo-samandehi