unity 接入 阿里 ossclient sdk

1、导入DLL 会有平台不兼容的问题,这里导出SDK源代码。

2、导入aliyun_oss_dotnet_sdk_2_8_0\src 内代码 放入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.sheet\n" +
           "xltx    application/vnd.openxmlformats-officedocument.spreadsheetml.template\n" +
           "potx    application/vnd.openxmlformats-officedocument.presentationml.template\n" +
           "ppsx    application/vnd.openxmlformats-officedocument.presentationml.slideshow\n" +
           "pptx    application/vnd.openxmlformats-officedocument.presentationml.presentation\n" +
           "sldx    application/vnd.openxmlformats-officedocument.presentationml.slide\n" +
           "docx    application/vnd.openxmlformats-officedocument.wordprocessingml.document\n" +
           "dotx    application/vnd.openxmlformats-officedocument.wordprocessingml.template\n" +
           "xlam    application/vnd.ms-excel.addin.macroEnabled.12\n" +
           "xlsb    application/vnd.ms-excel.sheet.binary.macroEnabled.12\n" +
           "apk\t\tapplication/vnd.android.package-archive\n" +
           "hqx\t\tapplication/mac-binhex40\n" +
           "cpt\t\tapplication/mac-compactpro\n" +
           "doc\t\tapplication/msword\n" +
           "ogg\t\tapplication/ogg\n" +
           "pdf\t\tapplication/pdf\n" +
           "rtf\t\ttext/rtf\n" +
           "mif\t\tapplication/vnd.mif\n" +
           "xls\t\tapplication/vnd.ms-excel\n" +
           "ppt\t\tapplication/vnd.ms-powerpoint\n" +
           "odc\t\tapplication/vnd.oasis.opendocument.chart\n" +
           "odb\t\tapplication/vnd.oasis.opendocument.database\n" +
           "odf\t\tapplication/vnd.oasis.opendocument.formula\n" +
           "odg\t\tapplication/vnd.oasis.opendocument.graphics\n" +
           "otg\t\tapplication/vnd.oasis.opendocument.graphics-template\n" +
           "odi\t\tapplication/vnd.oasis.opendocument.image\n" +
           "odp\t\tapplication/vnd.oasis.opendocument.presentation\n" +
           "otp\t\tapplication/vnd.oasis.opendocument.presentation-template\n" +
           "ods\t\tapplication/vnd.oasis.opendocument.spreadsheet\n" +
           "ots\t\tapplication/vnd.oasis.opendocument.spreadsheet-template\n" +
           "odt\t\tapplication/vnd.oasis.opendocument.text\n" +
           "odm\t\tapplication/vnd.oasis.opendocument.text-master\n" +
           "ott\t\tapplication/vnd.oasis.opendocument.text-template\n" +
           "oth\t\tapplication/vnd.oasis.opendocument.text-web\n" +
           "sxw\t\tapplication/vnd.sun.xml.writer\n" +
           "stw\t\tapplication/vnd.sun.xml.writer.template\n" +
           "sxc\t\tapplication/vnd.sun.xml.calc\n" +
           "stc\t\tapplication/vnd.sun.xml.calc.template\n" +
           "sxd\t\tapplication/vnd.sun.xml.draw\n" +
           "std\t\tapplication/vnd.sun.xml.draw.template\n" +
           "sxi\t\tapplication/vnd.sun.xml.impress\n" +
           "sti\t\tapplication/vnd.sun.xml.impress.template\n" +
           "sxg\t\tapplication/vnd.sun.xml.writer.global\n" +
           "sxm\t\tapplication/vnd.sun.xml.math\n" +
           "sis\t\tapplication/vnd.symbian.install\n" +
           "wbxml\tapplication/vnd.wap.wbxml\n" +
           "wmlc\tapplication/vnd.wap.wmlc\n" +
           "wmlsc\tapplication/vnd.wap.wmlscriptc\n" +
           "bcpio\tapplication/x-bcpio\n" +
           "torrent\tapplication/x-bittorrent\n" +
           "bz2\t\tapplication/x-bzip2\n" +
           "vcd\t\tapplication/x-cdlink\n" +
           "pgn\t\tapplication/x-chess-pgn\n" +
           "cpio    application/x-cpio\n" +
           "csh\t\tapplication/x-csh\n" +
           "dvi\t\tapplication/x-dvi\n" +
           "spl\t\tapplication/x-futuresplash\n" +
           "gtar    application/x-gtar\n" +
           "hdf\t\tapplication/x-hdf\n" +
           "jar\t\tapplication/x-java-archive\n" +
           "jnlp    application/x-java-jnlp-file\n" +
           "js\t\tapplication/x-javascript\n" +
           "ksp\t\tapplication/x-kspread\n" +
           "chrt    application/x-kchart\n" +
           "kil\t\tapplication/x-killustrator\n" +
           "latex\tapplication/x-latex\n" +
           "rpm\t\tapplication/x-rpm\n" +
           "sh\t\tapplication/x-sh\n" +
           "shar    application/x-shar\n" +
           "swf\t\tapplication/x-shockwave-flash\n" +
           "sit\t\tapplication/x-stuffit\n" +
           "sv4cpio\tapplication/x-sv4cpio\n" +
           "sv4crc\tapplication/x-sv4crc\n" +
           "tar\t\tapplication/x-tar\n" +
           "tcl\t\tapplication/x-tcl\n" +
           "tex\t\tapplication/x-tex\n" +
           "man\t\tapplication/x-troff-man\n" +
           "me\t\tapplication/x-troff-me\n" +
           "ms\t\tapplication/x-troff-ms\n" +
           "ustar\tapplication/x-ustar\n" +
           "src\t\tapplication/x-wais-source\n" +
           "zip\t\tapplication/zip\n" +
           "m3u\t\taudio/x-mpegurl\n" +
           "ra\t\taudio/x-pn-realaudio\n" +
           "wav\t\taudio/x-wav\n" +
           "wma\t\taudio/x-ms-wma\n" +
           "wax\t\taudio/x-ms-wax\n" +
           "pdb\t\tchemical/x-pdb\n" +
           "xyz\t    chemical/x-xyz\n" +
           "bmp\t    image/bmp\n" +
           "gi\t\timage/gif\n" +
           "ief\t\timage/ief\n" +
           "png\t    image/png\n" +
           "wbmp    image/vnd.wap.wbmp\n" +
           "ras\t    image/x-cmu-raster\n" +
           "pnm\t    image/x-portable-anymap\n" +
           "pbm\t    image/x-portable-bitmap\n" +
           "pgm\t    image/x-portable-graymap\n" +
           "ppm\t    image/x-portable-pixmap\n" +
           "rgb\t    image/x-rgb\n" +
           "xbm\t    image/x-xbitmap\n" +
           "xpm\t\timage/x-xpixmap\n" +
           "xwd\t    image/x-xwindowdump\n" +
           "css\t    text/css\n" +
           "rtx\t    text/richtext\n" +
           "tsv\t    text/tab-separated-values\n" +
           "jad\t    text/vnd.sun.j2me.app-descriptor\n" +
           "wml\t    text/vnd.wap.wml\n" +
           "wmls\ttext/vnd.wap.wmlscript\n" +
           "etx\t    text/x-setext\n" +
           "mxu\t    video/vnd.mpegurl\n" +
           "flv\t    video/x-flv\n" +
           "wm\t    video/x-ms-wm\n" +
           "wmv\t    video/x-ms-wmv\n" +
           "wmx\t    video/x-ms-wmx\n" +
           "wvx\t    video/x-ms-wvx\n" +
           "avi\t    video/x-msvideo\n" +
           "movie\tvideo/x-sgi-movie\n" +
           "ice\t\tx-conference/x-cooltalk\n" +
           "3gp\t    video/3gpp\n" +
           "ai\t    application/postscript\n" +
           "aif\t    audio/x-aiff\n" +
           "aifc    audio/x-aiff\n" +
           "aiff    audio/x-aiff\n" +
           "asc\t    text/plain\n" +
           "atom    application/atom+xml\n" +
           "au\t    audio/basic\n" +
           "bin\t\tapplication/octet-stream\n" +
           "cdf     application/x-netcdf\n" +
           "cgm     image/cgm\n" +
           "class   application/octet-stream\n" +
           "dcr     application/x-director\n" +
           "dif     video/x-dv\n" +
           "dir     application/x-director\n" +
           "djv     image/vnd.djvu\n" +
           "djvu    image/vnd.djvu\n" +
           "dll     application/octet-stream\n" +
           "dmg     application/octet-stream\n" +
           "dms     application/octet-stream\n" +
           "dtd     application/xml-dtd\n" +
           "dv      video/x-dv\n" +
           "dxr     application/x-director\n" +
           "eps     application/postscript\n" +
           "exe     application/octet-stream\n" +
           "ez      application/andrew-inset\n" +
           "gram    application/srgs\n" +
           "grxml   application/srgs+xml\n" +
           "gz      application/x-gzip\n" +
           "htm     text/html\n" +
           "html    text/html\n" +
           "ico     image/x-icon\n" +
           "ics     text/calendar\n" +
           "ifb     text/calendar\n" +
           "iges    model/iges\n" +
           "igs     model/iges\n" +
           "jp2     image/jp2\n" +
           "jpe     image/jpeg\n" +
           "jpeg    image/jpeg\n" +
           "jpg     image/jpeg\n" +
           "kar     audio/midi\n" +
           "lha     application/octet-stream\n" +
           "lzh     application/octet-stream\n" +
           "m4a     audio/mp4a-latm\n" +
           "m4p     audio/mp4a-latm\n" +
           "m4u     video/vnd.mpegurl\n" +
           "m4v     video/x-m4v\n" +
           "mac     image/x-macpaint\n" +
           "mathml  application/mathml+xml\n" +
           "mesh    model/mesh\n" +
           "mid     audio/midi\n" +
           "midi    audio/midi\n" +
           "mov     video/quicktime\n" +
           "mp2     audio/mpeg\n" +
           "mp3     audio/mpeg\n" +
           "mp4     video/mp4\n" +
           "mpe     video/mpeg\n" +
           "mpeg    video/mpeg\n" +
           "mpg     video/mpeg\n" +
           "mpga    audio/mpeg\n" +
           "msh     model/mesh\n" +
           "nc      application/x-netcdf\n" +
           "oda     application/oda\n" +
           "ogv     video/ogv\n" +
           "pct     image/pict\n" +
           "pic     image/pict\n" +
           "pict    image/pict\n" +
           "pnt     image/x-macpaint\n" +
           "pntg    image/x-macpaint\n" +
           "ps      application/postscript\n" +
           "qt      video/quicktime\n" +
           "qti     image/x-quicktime\n" +
           "qtif    image/x-quicktime\n" +
           "ram     audio/x-pn-realaudio\n" +
           "rdf     application/rdf+xml\n" +
           "rm      application/vnd.rn-realmedia\n" +
           "roff    application/x-troff\n" +
           "sgm     text/sgml\n" +
           "sgml    text/sgml\n" +
           "silo    model/mesh\n" +
           "skd     application/x-koan\n" +
           "skm     application/x-koan\n" +
           "skp     application/x-koan\n" +
           "skt     application/x-koan\n" +
           "smi     application/smil\n" +
           "smil    application/smil\n" +
           "snd     audio/basic\n" +
           "so      application/octet-stream\n" +
           "svg     image/svg+xml\n" +
           "t       application/x-troff\n" +
           "texi    application/x-texinfo\n" +
           "texinfo pplication/x-texinfo\n" +
           "tif     image/tiff\n" +
           "tiff    image/tiff\n" +
           "tr      application/x-troff\n" +
           "txt     text/plain\n" +
           "vrml    model/vrml\n" +
           "vxml    application/voicexml+xml\n" +
           "webm    video/webm\n" +
           "wrl     model/vrml\n" +
           "xht     application/xhtml+xml\n" +
           "xhtml   application/xhtml+xml\n" +
           "xml     application/xml\n" +
           "xsl     application/xml\n" +
           "xslt    application/xslt+xml\n" +
           "xul     application/vnd.mozilla.xul+xml\n" +
           "webp    image/webp\n";

这样就可以正常使用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<bool> callback)
        {
            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<bool> callback)
        {
            //发送请求
            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;
        }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Unity中导入Aliyun OSS SDK,可以按照以下步骤进行。 1. 下载Aliyun OSS SDK。可以从Aliyun OSS官方网站https://www.alibabacloud.com/help/zh/doc-detail/32068.htm下载最新的SDK。 2. 解压下载的SDK包。将解压后的文件夹放在Unity项目Assets目录下的任何位置。 3. 在Unity中创建一个新的C#脚本,并将其命名为“AliyunOSS.cs”(或者任何你喜欢的名称)。 4. 在脚本中添加以下代码: ```csharp using System.Collections; using System.Collections.Generic; using UnityEngine; using Aliyun.OSS; public class AliyunOSS : MonoBehaviour { // 在这里定义OSS的Access Key和Secret Key,以及Bucket名称和Endpoint private const string accessKeyId = "your-access-key-id"; private const string accessKeySecret = "your-access-key-secret"; private const string bucketName = "your-bucket-name"; private const string endpoint = "your-endpoint"; public void UploadFile(string objectKey, string filePath) { // 创建OSSClient实例 var credentials = new DefaultCredentials(accessKeyId, accessKeySecret); var client = new OssClient(endpoint, credentials); // 上传文件 var request = new PutObjectRequest(bucketName, objectKey, filePath); client.PutObject(request); } public void DownloadFile(string objectKey, string filePath) { // 创建OSSClient实例 var credentials = new DefaultCredentials(accessKeyId, accessKeySecret); var client = new OssClient(endpoint, credentials); // 下载文件 var request = new GetObjectRequest(bucketName, objectKey); var result = client.GetObject(request); using (var stream = result.Content) { byte[] buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); File.WriteAllBytes(filePath, buffer); } } } ``` 5. 在Unity中使用导入的SDK。例如,如果你想上传一个名为“test.txt”的文件,可以使用以下代码: ```csharp public void UploadTestFile() { AliyunOSS oss = new AliyunOSS(); oss.UploadFile("test.txt", Application.dataPath + "/test.txt"); } ``` 以上代码将使用AliyunOSS类的UploadFile方法上传文件。在这个例子中,文件名为“test.txt”,文件路径为Unity项目的Assets/test.txt。 请注意,以上代码只是一个简单的示例,你需要根据自己的需求进行修改。例如,你可能需要添加错误处理、进度更新等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾米神探

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值