Upload Image To Server

装逼令人进步,装孙子使人销你。
今天我是来记录Unity开发心得的,不行那我也得来一段儿定场诗:

健壮的女房东她送你一盒万艾可,
次卧的女孩啊她送你一只曲米松,
十五号技师啊她送你一只达克宁,
好心的姑娘啊她送你一只马应龙。

我拿什么送给你啊我疏离已久的老奶奶,
我拿什么送给你啊我背弃已久的前股东,
我拿什么送给你啊我怀念已久的第一夜,
我拿什么送给你啊我视奸已久的小美工。

我送给了 女房东 一整盒的百忧解,
我送给 次卧女孩 一大箱的氯丙嗪,
我送给 十五号技师 一整管的克霉唑,
我送给 好心的姑娘 一夜咿呀哎呀咿。

名不重要

昨天我在咖啡厅,一伙人来喝了之后,特别喜欢,然后就问老板要名片。
老板说没有,然后常客某大姐就说,你把那个挂着的明信片儿做成名片得了呗!多好看啊!
店长在吧台里望向我,说,我得征得一下版权同意。
然后我手比OK。
然后店长问大姐,你知道谁画的么?
大姐说,不道啊!
他说,你回头。
然后我收到了来自非程序员身份的敬佩。

Upload Image To Server 

选取本机图片文件

寻到一个开源的库,UnityStandaloneFileBrowser,可以解决非移动端的图片选取问题。

1
2
3
4
5
6
using SFB;

var extensions = new[] {
new ExtensionFilter("Image Files", "png", "jpg", "jpeg" )
};
string[] path = StandaloneFileBrowser.OpenFilePanel("Take a picture as your avatar", "", extensions, false);

加载选定的文件

1
2
3
4
5
6
7
8
9
WWW localFile = new WWW("file:///" + path[0]);
yield return localFile;
if (localFile.error == null)
Debug.Log("Loaded file successfully");
else
{
Debug.Log("Open file error: " + localFile.error);
yield break;
}

观察来自GET开发小分队的POST请求样例

GET小分队在我的感召下,学会了用Postman,而不是自己写一个form标签或者XMLHttpRequest来验证其产出的API是好用的。因此在我多次上传未果的情况下,我决定去看他是怎么验证的。

装配Form数据

1
2
WWWForm postForm = new WWWForm();
postForm.AddBinaryData("headImg",localFile.texture.EncodeToPNG());

这里不要设定后两个参数帮我解决了一直行不通的问题。其实我马上就要上Charles去debug http request了。

UnityWebRequest

1
2
3
UnityWebRequest request = UnityWebRequest.Post(uploadURL, postForm);
request.SetRequestHeader("Authorization", user.token);
request.Send();

获取上传进度

1
2
3
4
5
6
while (!request.isDone)
{
int p = (int)(request.uploadProgress * 100);
progressCallBack(p);
yield return null;
}

利用Delegate定义Callback方法

1
2
3
4
5
6
public delegate void RequestCallBack(bool isSuccess, string jsonDataString);

//应用在方法定义里
public void ChooseAndUploadImage(RequestCallBack callBack, ProgressCallBack progressCallBack){

}

Coroutine

眼下对Coroutine的理解尚未透彻,只知道其在代码的不同处理阶段,根据作用对象不同,采取让程序继续执行还是在下一帧被调用时重新判断条件,一直到整个代码段执行结束。