Загрузка изображения с userdatas из Android в Node.js - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь отправить изображение с Объектом с именем DiaryItem.

Это метод uploadFile в упражнении.

    RemoteService remoteService = ServiceGenerator.createService(RemoteService.class);

    File file = new File(imgAbsoluthPath);
    RequestBody reqFile = RequestBody.create(MediaType.parse("image/*"), file);
    MultipartBody.Part body = MultipartBody.Part.createFormData("upload", file.getName(), reqFile);
    Call<Integer> req = null;
    try {
        RequestBody username = RequestBody.create(MediaType.parse("text/plain; charset=utf-8"), diaryItem.getUsername());
        RequestBody date = RequestBody.create(MediaType.parse("text/plain; charset=utf-8"), diaryItem.getDate());
        RequestBody memo = RequestBody.create(MediaType.parse("text/plain; charset=utf-8"), diaryItem.getMemo());
        RequestBody photoPath = RequestBody.create(MediaType.parse("text/plain; charset=utf-8"), diaryItem.getPhotoPath());
        req = remoteService.insertDiary(body, username, date, memo, photoPath);
        req.enqueue(new Callback<Integer>() {
            @Override
            public void onResponse(Call<Integer> call, Response<Integer> response) {
                Integer result = response.body();
                if (response.isSuccessful() && result != null) {
                    Log.d(TAG, result.toString());
                    if (result == 1) {
                        Toast.makeText(AddEventActivity.this, "다이어리 저장 완료!", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(AddEventActivity.this, "저장 실패!", Toast.LENGTH_SHORT).show();
                    }
                }
                Log.d(TAG, "Got results from server successfully!!!");
            }

            @Override
            public void onFailure(Call<Integer> call, Throwable t) {
                t.printStackTrace();
            }
        });
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        asyncDialog.dismiss();
    }

Это RemoteService.java

@Multipart
@POST("/user/insertDiary")
Call<Integer> insertDiary(@Part MultipartBody.Part file,
                          @Part RequestBody diaryItem);

Это Node.js

var fs = require('fs');
var express = require('express');
var formidable = require('formidable');
var db = require('../db');
var router = express.Router();

router.post("/insertDiary", function(req, res, next){
    console.log("/insertDiary");
    var form = new formidable.IncomingForm();
    var diaryItem = req.body.diaryItem;

    var dir = './routes/images';

    console.log("Folder is "+fs.existsSync(dir));

    if(!fs.existsSync(dir)){
        fs.mkdirSync(dir);
        console.log("Folder created at "+dir);
    }

    console.log("START fileBegin");

    form.on('fileBegin', function (name, file){
        file.path = __dirname + '/images/'+file.name;
        console.log("fileBegin: file.path: "+file.path);
    });

    console.log("START file");
    form.on('file', function(name, file){
        console.log('file: Uploaded ' + file.name);
    });

    console.log("Ok---DB START");
    var sql = "INSERT INTO diary(username, date, memo, photoPath) values(?,?,?,?)";

    console.log(sql);
    console.log("input:"+photoPath);

    db.get().query(sql, input, function(err,result){
        if(err) console.log(JSON.stringify(err, null, 2));
        console.log(JSON.stringify(result, null, 2));
        res.status(200).send(result.affecedRows);
    });
});
module.exports = router;

Файл изображения загружается очень хорошо.

Итак, мой вопрос How can I send an Object with @Part annotation? and handle it in Node.js?.

Я попробовал форму.parse ().Я получил результат в порядке.Однако возникла проблема с асинхронностью.Кто-то сказал мне, что я не должен думать о получении каких-либо значений в функции обратного вызова.Вместо этого мне нужно получить значения от клиентов или использовать async / await или обещание.

Эти трое кажутся трудными.Итак, я сдался, и я хочу знать, возможно ли получить много переменных или объект из клиента с помощью @Part.И RequestBody.

Разве @Part принимает только RequestBody?Я видел несколько примеров кодов, и они использовали String, и мне интересно, работает ли он или нет.

...