[Unity] UnityWebRequest 의 Get, Post 사용하기
외부에서 파일을 다운받기 위해 UnityWebRequest를 사용해보려 한다
UnityWebRequest.Get(URL)
먼저 구글드라이브에서 다운로드 링크를 하나 만들었다
그리고 코드를 작성했는데,
FilePath에서 permission denied가 나서 권한을 어떻게 주어야 하지 싶었다
그런데 알고보니 딱히 권한 설정을 만질 필요는 없었고,
path를 수정해주어야 했는데, 디렉터리가 아니라 파일명까지 포함해야 했다
string FilePath = "Assets/Resources" // (Error)
string FilePath = "Assets/Resources/hp.png"; // (Ok!)
File.WriteAllBytes() 자체가 원래있던 파일에 덮어씌우는 느낌이라서..!
그래서 저장하려는 폴더에 같은 이름의 파일을 아무거나 넣어놓고,
아래 코드를 테스트했더니 정상적으로 다운받아졌다
최종적으로는 폴더에 같은 이름의 파일을 넣어놓는 과정을 생략하기 위해
File.Create()로 같은 이름의 empty file을 먼저 생성해주었다
using System.IO;
using UnityEngine.Networking;
public class WebRequestTest : MonoBehaviour
{
string FilePath = "Assets/Resources/hp.png";
string createFilePath = "Assets/Resources/hp.png";
void Start()
{
File.Create(createFilePath);
StartCoroutine(DownLoadGet("{다운로드 링크}"));
public IEnumerator DownLoadGet(string URL)
{
UnityWebRequest request = UnityWebRequest.Get(URL);
yield return request.SendWebRequest();
// 에러 발생 시
if(request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError)
{
Debug.Log(request.error);
}
else
{
File.WriteAllBytes(FilePath, request.downloadHandler.data); // 파일 다운로드
}
}
}
UnityWebRequest.Post(URL)
- 유니티에서 JsonUtility를 지원해서 게임오브젝트도 Jsonfile로 만들어서 전송할 수 있다
- Upload할 서버가 없어서 아직 테스트는 해보지 못했다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class WebRequestPostTest : MonoBehaviour
{
public GameObject postObj;
// Start is called before the first frame update
void Start()
{
string jsonfile = JsonUtility.ToJson(postObj);
StartCoroutine(Upload("http://URL", jsonfile));
}
IEnumerator Upload(string URL, string jsonfile)
{
using (UnityWebRequest request = UnityWebRequest.Post(URL, jsonfile))
{
byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes(jsonfile);
request.uploadHandler = new UploadHandlerRaw(jsonToSend);
request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
yield return request.SendWebRequest();
if(request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError)
{
Debug.Log(request.error);
}
else
{
Debug.Log(request.downloadHandler.text);
}
}
}
}
다음에는 서버 파서 올려보고 Json 파싱하는 거까지 해봐야겠다
참고
- https://timeboxstory.tistory.com/81
- https://stackoverflow.com/questions/46182381/c-sharp-file-writeallbytes-doesnt-work-filepath-doesnt-work
- https://doggie-development.tistory.com/3
- https://docs.unity3d.com/kr/2017.4/Manual/UnityWebRequest-SendingForm.html
- https://timeboxstory.tistory.com/83
Author And Source
이 문제에 관하여([Unity] UnityWebRequest 의 Get, Post 사용하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@minjujuu/Unity-UnityWebRequest-사용해서-파일-다운받기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)