Я пытаюсь отправить изображение с Объектом с именем 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
, и мне интересно, работает ли он или нет.