외부에서 파일을 다운받기 위해 UnityWebRequest를 사용해보려 한다
먼저 구글드라이브에서 다운로드 링크를 하나 만들었다
그리고 코드를 작성했는데,
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); // 파일 다운로드
}
}
}
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 파싱하는 거까지 해봐야겠다
참고