1、导入DLL 会有平台不兼容的问题,这里导出SDK源代码。
2、导入aliyun_oss_dotnet_sdk_2_8_0src 内代码 放入unity 工程。
3、会报 HttpUtils 里面的一个异常错误
var mimeLines = Properties.Resources.MimeData.ToString().Split('n');//异常产生处
原因是这个 MimeData 无法通过ResourceManager.GetString 获取。
源代码
//internal static string MimeData {
// get {
// return ResourceManager.GetString("MimeData", resourceCulture);
// }
//}
修改为
internal static readonly string MimeData =
"xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheetn" +
"xltx application/vnd.openxmlformats-officedocument.spreadsheetml.templaten" +
"potx application/vnd.openxmlformats-officedocument.presentationml.templaten" +
"ppsx application/vnd.openxmlformats-officedocument.presentationml.slideshown" +
"pptx application/vnd.openxmlformats-officedocument.presentationml.presentationn" +
"sldx application/vnd.openxmlformats-officedocument.presentationml.sliden" +
"docx application/vnd.openxmlformats-officedocument.wordprocessingml.documentn" +
"dotx application/vnd.openxmlformats-officedocument.wordprocessingml.templaten" +
"xlam application/vnd.ms-excel.addin.macroEnabled.12n" +
"xlsb application/vnd.ms-excel.sheet.binary.macroEnabled.12n" +
"apkttapplication/vnd.android.package-archiven" +
"hqxttapplication/mac-binhex40n" +
"cptttapplication/mac-compactpron" +
"docttapplication/mswordn" +
"oggttapplication/oggn" +
"pdfttapplication/pdfn" +
"rtftttext/rtfn" +
"mifttapplication/vnd.mifn" +
"xlsttapplication/vnd.ms-exceln" +
"pptttapplication/vnd.ms-powerpointn" +
"odcttapplication/vnd.oasis.opendocument.chartn" +
"odbttapplication/vnd.oasis.opendocument.databasen" +
"odfttapplication/vnd.oasis.opendocument.formulan" +
"odgttapplication/vnd.oasis.opendocument.graphicsn" +
"otgttapplication/vnd.oasis.opendocument.graphics-templaten" +
"odittapplication/vnd.oasis.opendocument.imagen" +
"odpttapplication/vnd.oasis.opendocument.presentationn" +
"otpttapplication/vnd.oasis.opendocument.presentation-templaten" +
"odsttapplication/vnd.oasis.opendocument.spreadsheetn" +
"otsttapplication/vnd.oasis.opendocument.spreadsheet-templaten" +
"odtttapplication/vnd.oasis.opendocument.textn" +
"odmttapplication/vnd.oasis.opendocument.text-mastern" +
"ottttapplication/vnd.oasis.opendocument.text-templaten" +
"othttapplication/vnd.oasis.opendocument.text-webn" +
"sxwttapplication/vnd.sun.xml.writern" +
"stwttapplication/vnd.sun.xml.writer.templaten" +
"sxcttapplication/vnd.sun.xml.calcn" +
"stcttapplication/vnd.sun.xml.calc.templaten" +
"sxdttapplication/vnd.sun.xml.drawn" +
"stdttapplication/vnd.sun.xml.draw.templaten" +
"sxittapplication/vnd.sun.xml.impressn" +
"stittapplication/vnd.sun.xml.impress.templaten" +
"sxgttapplication/vnd.sun.xml.writer.globaln" +
"sxmttapplication/vnd.sun.xml.mathn" +
"sisttapplication/vnd.symbian.installn" +
"wbxmltapplication/vnd.wap.wbxmln" +
"wmlctapplication/vnd.wap.wmlcn" +
"wmlsctapplication/vnd.wap.wmlscriptcn" +
"bcpiotapplication/x-bcpion" +
"torrenttapplication/x-bittorrentn" +
"bz2ttapplication/x-bzip2n" +
"vcdttapplication/x-cdlinkn" +
"pgnttapplication/x-chess-pgnn" +
"cpio application/x-cpion" +
"cshttapplication/x-cshn" +
"dvittapplication/x-dvin" +
"splttapplication/x-futuresplashn" +
"gtar application/x-gtarn" +
"hdfttapplication/x-hdfn" +
"jarttapplication/x-java-archiven" +
"jnlp application/x-java-jnlp-filen" +
"jsttapplication/x-javascriptn" +
"kspttapplication/x-kspreadn" +
"chrt application/x-kchartn" +
"kilttapplication/x-killustratorn" +
"latextapplication/x-latexn" +
"rpmttapplication/x-rpmn" +
"shttapplication/x-shn" +
"shar application/x-sharn" +
"swfttapplication/x-shockwave-flashn" +
"sitttapplication/x-stuffitn" +
"sv4cpiotapplication/x-sv4cpion" +
"sv4crctapplication/x-sv4crcn" +
"tarttapplication/x-tarn" +
"tclttapplication/x-tcln" +
"texttapplication/x-texn" +
"manttapplication/x-troff-mann" +
"mettapplication/x-troff-men" +
"msttapplication/x-troff-msn" +
"ustartapplication/x-ustarn" +
"srcttapplication/x-wais-sourcen" +
"zipttapplication/zipn" +
"m3uttaudio/x-mpegurln" +
"rattaudio/x-pn-realaudion" +
"wavttaudio/x-wavn" +
"wmattaudio/x-ms-wman" +
"waxttaudio/x-ms-waxn" +
"pdbttchemical/x-pdbn" +
"xyzt chemical/x-xyzn" +
"bmpt image/bmpn" +
"gittimage/gifn" +
"iefttimage/iefn" +
"pngt image/pngn" +
"wbmp image/vnd.wap.wbmpn" +
"rast image/x-cmu-rastern" +
"pnmt image/x-portable-anymapn" +
"pbmt image/x-portable-bitmapn" +
"pgmt image/x-portable-graymapn" +
"ppmt image/x-portable-pixmapn" +
"rgbt image/x-rgbn" +
"xbmt image/x-xbitmapn" +
"xpmttimage/x-xpixmapn" +
"xwdt image/x-xwindowdumpn" +
"csst text/cssn" +
"rtxt text/richtextn" +
"tsvt text/tab-separated-valuesn" +
"jadt text/vnd.sun.j2me.app-descriptorn" +
"wmlt text/vnd.wap.wmln" +
"wmlsttext/vnd.wap.wmlscriptn" +
"etxt text/x-setextn" +
"mxut video/vnd.mpegurln" +
"flvt video/x-flvn" +
"wmt video/x-ms-wmn" +
"wmvt video/x-ms-wmvn" +
"wmxt video/x-ms-wmxn" +
"wvxt video/x-ms-wvxn" +
"avit video/x-msvideon" +
"movietvideo/x-sgi-movien" +
"icettx-conference/x-cooltalkn" +
"3gpt video/3gppn" +
"ait application/postscriptn" +
"aift audio/x-aiffn" +
"aifc audio/x-aiffn" +
"aiff audio/x-aiffn" +
"asct text/plainn" +
"atom application/atom+xmln" +
"aut audio/basicn" +
"binttapplication/octet-streamn" +
"cdf application/x-netcdfn" +
"cgm image/cgmn" +
"class application/octet-streamn" +
"dcr application/x-directorn" +
"dif video/x-dvn" +
"dir application/x-directorn" +
"djv image/vnd.djvun" +
"djvu image/vnd.djvun" +
"dll application/octet-streamn" +
"dmg application/octet-streamn" +
"dms application/octet-streamn" +
"dtd application/xml-dtdn" +
"dv video/x-dvn" +
"dxr application/x-directorn" +
"eps application/postscriptn" +
"exe application/octet-streamn" +
"ez application/andrew-insetn" +
"gram application/srgsn" +
"grxml application/srgs+xmln" +
"gz application/x-gzipn" +
"htm text/htmln" +
"html text/htmln" +
"ico image/x-iconn" +
"ics text/calendarn" +
"ifb text/calendarn" +
"iges model/igesn" +
"igs model/igesn" +
"jp2 image/jp2n" +
"jpe image/jpegn" +
"jpeg image/jpegn" +
"jpg image/jpegn" +
"kar audio/midin" +
"lha application/octet-streamn" +
"lzh application/octet-streamn" +
"m4a audio/mp4a-latmn" +
"m4p audio/mp4a-latmn" +
"m4u video/vnd.mpegurln" +
"m4v video/x-m4vn" +
"mac image/x-macpaintn" +
"mathml application/mathml+xmln" +
"mesh model/meshn" +
"mid audio/midin" +
"midi audio/midin" +
"mov video/quicktimen" +
"mp2 audio/mpegn" +
"mp3 audio/mpegn" +
"mp4 video/mp4n" +
"mpe video/mpegn" +
"mpeg video/mpegn" +
"mpg video/mpegn" +
"mpga audio/mpegn" +
"msh model/meshn" +
"nc application/x-netcdfn" +
"oda application/odan" +
"ogv video/ogvn" +
"pct image/pictn" +
"pic image/pictn" +
"pict image/pictn" +
"pnt image/x-macpaintn" +
"pntg image/x-macpaintn" +
"ps application/postscriptn" +
"qt video/quicktimen" +
"qti image/x-quicktimen" +
"qtif image/x-quicktimen" +
"ram audio/x-pn-realaudion" +
"rdf application/rdf+xmln" +
"rm application/vnd.rn-realmedian" +
"roff application/x-troffn" +
"sgm text/sgmln" +
"sgml text/sgmln" +
"silo model/meshn" +
"skd application/x-koann" +
"skm application/x-koann" +
"skp application/x-koann" +
"skt application/x-koann" +
"smi application/smiln" +
"smil application/smiln" +
"snd audio/basicn" +
"so application/octet-streamn" +
"svg image/svg+xmln" +
"t application/x-troffn" +
"texi application/x-texinfon" +
"texinfo pplication/x-texinfon" +
"tif image/tiffn" +
"tiff image/tiffn" +
"tr application/x-troffn" +
"txt text/plainn" +
"vrml model/vrmln" +
"vxml application/voicexml+xmln" +
"webm video/webmn" +
"wrl model/vrmln" +
"xht application/xhtml+xmln" +
"xhtml application/xhtml+xmln" +
"xml application/xmln" +
"xsl application/xmln" +
"xslt application/xslt+xmln" +
"xul application/vnd.mozilla.xul+xmln" +
"webp image/webpn";
这样就可以正常使用SDK 功能了。
4、_addInternalMethod这个引用永远为空,原因就是.net40里WebHeaderCollection这里根本没有AddInternal这个函数,
//var internalMethodName = (_isMonoPlatform == true) ? "AddWithoutValidate" : "AddInternal";
全部使用 AddWithoutValidate
5、Unity Webgl 无法正常下载ossclient 文件。
修改为url 去下载。
public void DownLoadFile(string _strFile, string _strFilePath,Action
{
this.fileName = _strFile;
this.filePath = _strFilePath;
Debug.Log("DownLoadFile==============");
var client = new OssClient(Config.EndPoint, Config.AccessKeyId, Config.AccessKeySecret);
try
{
Debug.Log("DownLoadFile _strFile========" + _strFile);
Debug.Log("DownLoadFile _strFilePath===========" + _strFilePath);
var req = new GeneratePresignedUriRequest(Config.Bucket, _strFile, SignHttpMethod.Get);
var uri = client.GeneratePresignedUri(req);
Debug.Log("uri======" + uri.OriginalString);
StartCoroutine(DownUrl(uri.OriginalString, _strFilePath, (succ) =>{
callback?.Invoke(succ);
}));
}
catch (OssException ex)
{
Debug.Log("Failed with error code:"+ ex.ErrorCode + "; Error info: "+ ex.Message + ".RequestID: HostID:"+ ex.HostId.ToString());
}
catch (Exception ex)
{
Debug.Log("Failed with error info:"+ ex.Message);
}
}
IEnumerator DownUrl(string downloadingUrl,string _strFilePath, Action
{
//发送请求
UnityWebRequest webRequest = UnityWebRequest.Get(downloadingUrl);
yield return webRequest.SendWebRequest();
if (webRequest.isHttpError || webRequest.isNetworkError)
{
Debug.Log("Download Error:" + webRequest.error);
callback?.Invoke(false);
}
else
{
Debug.Log("DownUrl==============");
//获取二进制数据
var _Filedata = webRequest.downloadHandler.data;
using (var file = File.Open(_strFilePath, FileMode.OpenOrCreate))
{
int length = (int)_Filedata.Length;
file.Write(_Filedata, 0, length);
}
callback?.Invoke(true);
}
}
6、Unity Webgl 上传文件问题。
ossclient 上传文件
ossClient.PutObject(signedUrl, stream); 会因为缺少webgl 库 上传失效。
var generatePresignedUriRequest = new GeneratePresignedUriRequest(Config.Bucket, _strFile, SignHttpMethod.Put);
var signedUrl = ossClient.GeneratePresignedUri(generatePresignedUriRequest);
// 使用签名URL上传文件。
StartCoroutine(UpLoadPut(signedUrl, bytes, _strFile));
用 UnityWebRequset 会出403 签名不匹配的错误。这里用BestHttp 插件 实现现下面的方法。就可以正常上传连接 文件和数据了。
IEnumerator UpLoadPut(Uri url, string data,string fileName)
{
var request = new HTTPRequest(url,HTTPMethods.Put,(op1,op2)=>{
Debug.Log("HTTPRequest: ===========" );
});
byte[] bytes = Encoding.UTF8.GetBytes(data);
request.RawData = bytes;
request.Send();
yield return null;
}



