typescript - Làm thế nào để tải ảnh lên từ expo-image-picker?
Tôi đã thử nhiều cách để tải ảnh lên từ expo-image-picker, nhưng vẫn chưa tìm ra. Máy chủ là nestjs cổ điển với multer
@Post()
@UseInterceptors(FileInterceptor('file'))
public addTimelineEventWithSingleImage(
@Headers('x-token') token: string,
@UploadedFile() file: Express.Multer.File,
@Body() body: IAddEventBody
): Promise<void> {
console.log('file', file);
console.log('body', body);
}
những bản ghi là:
Mar 5 04:13:00 PM file undefined
Mar 5 04:13:00 PM body {
Mar 5 04:13:00 PM _parts: [
Mar 5 04:13:00 PM [ 'file', [Object] ],
Mar 5 04:13:00 PM [ 'description', '' ],
Mar 5 04:13:00 PM [ 'eventType', 'COMMENT' ]
Mar 5 04:13:00 PM ]
Mar 5 04:13:00 PM }
Tôi đang tạo formData theo nhiều cách khác nhau
- từ bài viết này dưới dạng blob
const formData = new FormData();
formData.append('file', blob);
formData.append('description', timelineEvent.description);
formData.append('eventType', timelineEvent.eventType);
- với uri, tên và loại
formData.append('file', {
name: image.uri.split('/').pop(),
type: 'image/jpg',
uri: Platform.OS === 'android' ? image.uri : image.uri.replace('file://', ''),
});
- bộ đệm từ base64
const formData = new FormData();
formData.append('file', Buffer.from(image, 'base64'));
formData.append('description', timelineEvent.description);
formData.append('eventType', timelineEvent.eventType);
Tôi đã kiểm tra endpoint bằng Postman và nó hoạt động. Nguồn của URI là result.assets[0]:
let result = await ImagePicker.launchCameraAsync({
mediaTypes: MediaTypeOptions.Images,
selectionLimit: 1,
allowsEditing: true,
quality: 0.8,
base64: true,
aspect: [1, 1],
presentationStyle: UIImagePickerPresentationStyle.POPOVER
});
Có vẻ như việc tải lên một bức ảnh do người dùng chụp là đơn giản, nhưng không phải vậy, có ai có thể giúp không?