[Unity] WWWForm Post로 서버에 이미지 파일 업로드
준비물
서버, 유니티
*서버가 생기기 전에 테스트하고 싶을때는 자신의 PC로 테스트해보자
- Post로 이미지를 보내려면 서버에 받을 php가 필요함 (웹 잘몰름..)
그리고 php를 실행하려면 아파치 웹 서버와 php 를 다운받아야함
아래 블로그를 따라해서 웹서버, php 설치하기
[요약]
1. 아파치 설치
[아파치 설치 설명 잘 되어있다]
https://com24everyday.tistory.com/257
- 다운페이지: https://www.apachelounge.com/download/
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 설치+아파치 연결 설명 잘되어있음]
https://programming-workspace.tistory.com/19
* 다른점:
- 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;
}
}
이렇게하면 파일이 업로드됨..