В системе с архитектурой B/S серверная часть написана на Node.js и использует Multer для обработки загрузки файлов, а внешний интерфейс представляет собой приложение Android, написанное на Java. Если фронтенд получает данные фотографии с камеры в виде byte[] (YUV), преобразует их в byte[ формы JPEG), оборачивает их в multipart/form-data и отправляет на серверную часть, сможет ли Multer правильно распознать этот загруженный файл и успешно сохранить изображение?
Код в Android выглядит следующим образом:
public void login(String account,, byte[] photoYUVBytes, final LoginCallback callback) {
RequestBody accountBody = account != null ? RequestBody.create(MediaType.parse("text/plain"), account) : null;
MultipartBody.Part photoPart = null;
if (photoYUVBytes != null) {
Camera.Size size = MainFragment.getPreviewSize();
byte[] photoBytes = yuvToJpeg(photoYUVBytes,size.width,size.height);
RequestBody photoBody = RequestBody.create(MediaType.parse("image/*"), photoBytes);
photoPart = MultipartBody.Part.createFormData("photo", "face.jpg", photoBody);
}
Call call = loginApi.login(accountBody, photoPart);
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful() && response.body() != null) {
callback.onSuccess(response.body());
} else {
callback.onError(...);
}
}
});
}
и внутренний код такой:
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/'); // store catalog
},
filename: function (req, file, cb) {
const ext = path.extname(file.originalname) || '.jpg';
cb(null, `${Date.now()}${ext}`);
}
});
const upload = multer({ storage: storage });
router.post("/login", upload.single("photo") , async (req, res) => {...}
Подробнее здесь: https://stackoverflow.com/questions/797 ... -as-a-byte