해결된 질문
작성
·
753
답변 1
0
코드만으로는 원인을 알 수 없지요. 에러 메시지를 통해서 어떤 문제가 있는지 파악이 되니까요.
이미지 저장이 안 된다는 것은 move_uploaded_file() 부분에 문제가 있는 것 같으니 살펴보시지요.
name, 과 media 가 비어 있는게 원인일 수 있겠군요.
name은 수정해서 값이 잘들어갑니다. 그런데 아직도 media는 DB값이 ..으로 들어갑니다 그리고 서버에는 이미지가 들어가지 않습니다. 오류뜨는건 없습니다.
var pic = await http.MultipartFile.fromString('iamgeFile', _imageFile!.path); 에서 String을 Path로 고쳐 봤지만 var pic = await http.MultipartFile.fromPath('media', _imageFile!.path); 이미지가 들어가지 않네요. move_uploaded_file() 에서는 뭐가 문제인지 잘모르겠습니다.
서버 코드는 유튜브 참고하여 postman 으로 테스트 해 보시면 이미지가 잘 저장되는지 확인 가능합니다. 잘 된다면 서버 문제는 아닙니다. 그럼 플러터 문제겠지요.
저장이 안되면 서버 문제겠지요.
move_uploaded_file(): The second argument to copy() function cannot be a directory in
move_uploaded_file(): Unable to move '/tmp/phpomBmOK' to 'media/' in
postman 키값을 file로 따라해서 오류가없었습니다. 제가 쓴 media로 하니 위에 2개의 오류가 나타났습니다.
첫번째 오류는 두 번째 인수는 디렉토리가 될 수 없습니다.이고
두번째 오류는 /tmp/phpomBmOK'를 'media/'로 이동할 수 없습니다. 입니다.
어떻게 고쳐야 할까요? 두번째 오류는 aws(EC2)서버(프리티어)에서 처리해야하는 건가요?
해당 에러 검색하면 많은 사례가 나옵니다.
첫번째는 https://blog.naver.com/apchima/80101662830 참고 해 보세요.
두번째도 검색 해 보시면 다양한 경우가 있으니 확인해 보시면 좋겠고요, aws 쪽에서 디렉토리나 파일 생성 권한 같은 것도 보셔야 할 것 같습니다.
php DB쿼리문 수정하니 작동은 하는데 서버에 이미지가 들어가지 않습니다. 그리고 DB에는 media는 ..으로 들어갑니다
플러터 saveImage함수에 있는 if문에서 이미지 업로드 성공으로 들어가는데 php가 문제인가요? 아니면 플러터 코드에서 잘못된건가요?
<?php
include('db_setup.php');
$media = $_FILES['media']['name'];
$name = $_POST['name'];
$imagePath = 'media/'.$media;
$tmp_name = $_FILES['media']['tmp_name'];
move_uploaded_file($tmp_name, $imagePath);
$result = $conn->query("INSERT INTO filedata(name,media) VALUES('.$name.','.$media.')");
$count = mysqli_num_rows($result);
$conn->close();
?>
Future saveImage() async {
final uri = Uri.parse('http://ip주소/upload.php');
var request = http.MultipartRequest('POST', uri);
request.fields['name'] = _titlecontroller.text;
var pic = await http.MultipartFile.fromString('iamgeFile', _imageFile!.path);
request.files.add(pic);
var response = await request.send();
if(response.statusCode == 200){
print('이미지 업로드 성공');
}else{
print('이미지 업로드 실패');
}
}