• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    해결됨

flutter 멀티이미지업로드 질문

22.09.13 16:29 작성 조회수 454

0

안녕하세요

저번에 막힌부분은 임시방편으로 처리했습니다. 감사합니다.

정확히는 지금 시간이 없어서 나중에 고칠려고 합니다.

그리고 이번에 플러터+php(mysql)로 이미지 멀티 업로드에서 막힌부분이 있어서 질문을 드릴려고 합니다.

https://www.youtube.com/watch?v=4wbZxWtjg84&t=1497s

외국 유튜버분 php 코드 참고해서 작성했습니다. 그리고 플러터 코드도 작성후 멀티이미지 업로드 헀습니다.

그런데 저는 이미지가 여러장을 넣어도 한장만 업로드가 됩니다.

그래서 포스트맨으로 php코드를 테스트 해봤습니다.

    foreach($fd_media as $key => $value){
        echo $key. ": ".$value."<br>";
        foreach($tmp_name as $key => $tmp_namevalue){
            echo $key. ": ".$tmp_namevalue."<br>";
            if(move_uploaded_file($tmp_namevalue, 'media/'.$value)){
                chmod('media/'.$value,0777);
                $conn->query($sqlm = "INSERT INTO imagedata(fd_id,fd_title,fd_media) VALUES ('".$fd_id."','".$fd_title."','".$value."')"); 
                if($conn){
                    echo json_encode(array("message" => "Success"));
                }else{
                    echo json_encode(array("message" => "Error ".mysqli_error($sqlm)));
                }
            }
        }
    }

 

key : fd_media

value : fern222.jpg, fern333.jpg

 

포스트맨 Body값

0: fern333.jpg

<br>0: /tmp/phpW6kGPY

<br>{"message":"Success"}

이미지를 여러장 넣어도 1장만 가져오는데 php코드가 잘못된게 있는건가요?

 

답변 1

답변을 작성해보세요.

0

뒤에 1장만 print가 되었네요.

다음을 참고하면 여러장 정보 가져오는 부분을 해결할 수 있을 듯 합니다.

https://www.pinkcoding.com/class/web/PHP/uploading-file-attr-multiple/

chorokdosi님의 프로필

chorokdosi

질문자

2022.09.14

감사합니다.

php코드 수정 후 또 플러터 코드 수정 많이 했습니다.

지금 문제가 발생하여 질문드립니다.
플러터에서 2장을 이미지를 선택하고 작성버튼을 클릭하면

서버에는 이미지2장

DB에 글테이블에 3개의 값이 들어갑니다 그 중 에서 2개는 (id,제목,내용 빈값으로)들어가고 하나만 정상입니다.

그리고 이미지 테이블에는 4개의 값이 들어갑니다. 다 정상적으로 컬럼값이 들어가 있습니다.

플러터 코드입니다.

  var request2 = http.MultipartRequest('POST', uri2);
  request2.fields['fd_id'] = get_id;
  request2.fields['fd_name'] = get_name;
  request2.fields['fd_title'] = _titlecontroller.text;
  request2.fields['fd_content'] = _contentcontroller.text;
  request2.fields['views'] = '0';

  for(int i=0; i<_imageFile2.length; i++){
    //var pic = await http.MultipartFile.fromPath("fd_media[]", _imageFile2[i].path);
    final List<MultipartFile> _files = _imageFile2.map((e) => MultipartFile.fromFileSync(_imageFile2[i].path)).toList();

    FormData _formData = FormData.fromMap({
      "fd_id_dio": get_id,
      "fd_title_dio": _titlecontroller.text,
      "fd_media[]": _files
    });

    //request2.files.add(pic);
    
    print('${_imageFile2[i].path}');
    print('${_files}'+'---------------');
    var response1 = await dio.post(uri2.toString(), data: _formData);

    if(response1.statusCode == 200){
      print('이미지 업로드 성공');
      }else{
        print('이미지 업로드 실패');
      }
  }

  var response = await request2.send();

  if(response.statusCode == 200){
    print('커뮤니티 업로드 성공');
  }else{
    print('커뮤니티 업로드 실패');
  }
}

 

  1. 이미지 갯수만큼 post를 하는 것이 맞나요?

  2. 이미지 여러개를 한번의 post 를 하는 것이 맞나요?

위 코드는 1번처럼 동작하고 있는데 로직의 문제는 없는지 확인 해 보시면 어떨까요

chorokdosi님의 프로필

chorokdosi

질문자

2022.09.14

방금 해결했습니다. 감사합니다.

같은 이미지를 배열에 여러개 담고 나서 post 해서 2장이미지 전달하면 4장이 서버에 저장 되는 현상이 발생하여 코드를 수정했습니다.

그리고 글테이블에 쓸데없는 값이 들어가는 이유가 하나의 php 파일에 코드가 전부있어서 문제가 발생한거같아서 쉬운방법인 텍스트 저장php, 이미지저장php로 나눠서 처리했습니다.