카테고리 없음

[Unity] WWWForm Post로 서버에 이미지 파일 업로드

기억해조 2022. 11. 30. 01:23

준비물

서버, 유니티 

 

*서버가 생기기 전에 테스트하고 싶을때는 자신의 PC로 테스트해보자

- Post로 이미지를 보내려면 서버에 받을 php가 필요함 (웹 잘몰름..)

그리고 php를 실행하려면  아파치 웹 서버와 php 를 다운받아야함

 

아래 블로그를 따라해서 웹서버, php 설치하기 

 

[요약]

1. 아파치 설치

 

[아파치 설치 설명 잘 되어있다]

https://com24everyday.tistory.com/257

 

Windows10에 Apache 서버 구축 (오류 및 해결 방안 정리)

서버를 직접 구축해보았습니다. https://www.sitepoint.com/how-to-install-apache-on-windows/ How to Install Apache Web Server on Windows - SitePoint A step-by-step guide to manually installing the Apache Web Server on Windows, with links to furth

com24everyday.tistory.com

 

- 다운페이지:  https://www.apachelounge.com/download/

 

Apache VS17 binaries and modules download

 

www.apachelounge.com

Win64 설치 시 zip파일 다운로드됨

그리고 압축 풀고 C드라이브에 아파치폴더 넣기

 

2. C:\Apache24\conf 들어가서 httpd.conf 파일 수정 (# --> 주석이란뜻..)

2-1. Listen 8080

 

2-2. 주석해제

 

2-3. 

 

2-4. DocumentRoot는 http://localhost 실행 할때 root폴더이므로, 작업할 폴더로 설정함

 

 

 

3. 

--httpd.conf 수정하다가 잘하고있는지 확인하고싶으면 유효성검사 하면됨

httpd -t

 

 

 

-모두 잘 했으면 C:\Apache24\bin에서 아파치 모니터 클릭 후, Start 

(윈도우시스템트레이에 있을수도 있음)

 

 

- php 설치

Thread Safe 버전으로 설치하기

https://windows.php.net/download/

 

PHP For Windows: Binaries and sources Releases

PHP 8.0 (8.0.26) Download source code [23.47MB] Download tests package (phpt) [13.55MB] VS16 x64 Non Thread Safe (2022-Nov-22 19:03:36) Zip [25.52MB] sha256: f83c10ab7330b2cc6922b4eb1e937637cb2f1b22cc8e413702636211f83458d3 Debug Pack [23.21MB] sha256: a085

windows.php.net

 

[php 설치+아파치 연결 설명 잘되어있음]

https://fifo22.tistory.com/34

 

윈도우10 Window10 환경에서 Apache, PHP 설치하기

다른 블로그 보고 따라하다가 경로, 윈도우 비트 달라서 개뻘짓해서 빡쳐서 쓴는 글 내 컴퓨터가 win 64비트인지 확인해야함 이건 철저히 win 64비트를 위한 글임 1. 먼저 아파치 설치 https://www.apache

fifo22.tistory.com

https://programming-workspace.tistory.com/19

 

[Web Server] 윈도우에서 아파치 웹서버와 PHP 8.0 연동하기

아파치 웹서버와 PHP8.0 버전의 연동 방법에 대해서 알아보겠습니다. 블로그는 아래의 글들을 참고하여 작성하였습니다 :) 더보기 jimnong.tistory.com/613 gracefullight.dev/2017/01/13/%EB%A1%9C%EC%BB%AC-%EC%9B%B9%EC%

programming-workspace.tistory.com

 

 

 

* 다른점:

- PHP8로 했기때문에 php8로 폴더명 제작

- php설치 맨 마지막에 httpd.conf 파일 수정 하는부분 이렇게 해야한다. 

(LoadModule php7_module --> LoadModule php_module 이걸로 사용방법 바뀜)

PHPIniDir "C:/php8"
LoadModule php_module "C:/php8/php8apache2_4.dll"
AddType application/x-httpd-php .html .php
AddHandler application/x-httpd-php .php

 

+ localhost:8080으로 접속할때 아래와 같이 안뜨고 폴더처럼 나오면  DocumentRoot폴더에 index.html이 없어서 그렇다 

C:\Apache24\htdocs에 있는 html 파일 복사해서 DocumentRoot에 옮겨놓으면 아래와 같이 나올것이다.

 

-설치가 모두 되면

C:\Apache24/conf/httpd.conf 파일에서 IfModule dir_module부분을 아래와 같이 수정해줘야 php도 읽음

<IfModule dir_module>

    DirectoryIndex index.php index.html

</IfModule>

 

 

 

[유니티 세팅]

설치가 잘되고 아파치 서버도 잘 실행되면 

 

1. DocumentRoot폴더(나는 D:\Web )에  uploader폴더 생성

2. uploader에 uploaded_images폴더 생성 --> 업로드된 파일 저장 폴더

3. index.php 생성 

<?php

if (isset($_FILES['myimage'])){

    $img = $_FILES['myimage']['name'];
    $tmpimg = $_FILES['myimage']['tmp_name'];

    //To get file extension
    //$fileExt = pathinfo($img, PATHINFO_EXTENSION) ;

    move_uploaded_file($tmpimg, "./uploaded_images/$img");

    echo "[success] image ($img) uploaded successfully.";
    exit();
}
else{
	echo "[error] there is no data with name [myimage]";
}

?>

 

모두 하면 이런모양..

 

---

유니티 코드

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;


public class SendImage : MonoBehaviour
{
    private IEnumerator Start()
    {
        yield return SendData();
    }


    private IEnumerator SendData() 
    {
        string path = "C:\\Users\\Chaelin\\Desktop\\큐티\\오라, 달콤한 달콤한 치와와여.jpg";
        byte[] byteTexture = System.IO.File.ReadAllBytes(path);

		
        WWWForm form = new WWWForm();
        form.AddBinaryData("myimage", byteTexture,"ImageFromUnity.png","image/jpg");//myimage: php와 맞춤
    

        using (UnityWebRequest www = UnityWebRequest.Post("http://localhost:8080/uploader/", form))
        {
            //www.SetRequestHeader("Content-Type", "image/png");

            yield return www.SendWebRequest();

            if (www.result != UnityWebRequest.Result.Success)
            {
                Debug.Log("error" + www.error);
            }
            else
            {

            }
        }

        yield return null;
    }
    

}

 

이렇게하면 파일이 업로드됨..