这几天调试AVFile上传接口,在后台能看到AVFile纪录,但是访问其URL则是document not found.

查找自己代码无果后,使用不同size的文件依次尝试,发现小文件(约2k一下,经验估计,不要深究)可以上传成功,超过后虽然SDK返回成功,而且能获取File的ObjectId,但是后台没有其record。

查SDK文档,没有文件size相关的约束,我个人觉得Leancloud不至于抽风只允许上传2k左右的小文件。

大拿求解一下,在线等

谢谢谢谢

你好:

请问,「但是后台没有其record」是指在 _File 表没有生成一条数据吗?

是的,没有生成_File的record

附上代码:

AVFile file = AVFile.CreateFileWithLocalPath (gamePack, exportZipPath);

file.SaveAsync ().ContinueWith (t => {
Debug.Log (string.Format ("c:{0}, f:{1}, e:{2}, url:{3}", t.IsCanceled, t.IsCompleted, t.IsFaulted, file.Url.AbsolutePath));
foreach (var e in t.Exception.Flatten().InnerExceptions) {
Debug.LogException (e);
}
});

log:
c:False, f:True, e:False, url:/f3c4a920-2c7a-486d-b42e-a47e754da568.zip

后台没有生成AVFile的纪录。

确实是这样的,因为 Unity 自身的 Mono 运行时的版本太低,导致分片上传一直有问题,超过 2K的很容易失败,这个正在修复。

那如果是因为这个原因的话,是不是不建议使用AVFile接口上传文件,或者有没有推荐的其他文件上传操作方式?

暂时还没有别的办法了。除非自己写一个脚本卡死 UI 线程一直上传,不过不太建议这么做。

修复好了吗,我遇到这个问题了,求解决

您好,我使用的就是这个版本,但是发现unity下上传文件时依旧会出现document not found.的问题,_File表中有记录,但是文件无法通过url打开或下载,好像也是文件大小超过一个值就出现这个错误,几百k的文件就会出现这个问题

你好 这个上传文件有好多问题啊 之前用新的sdk会找不到AVFile里面的方法 更老的版本在上传大一点的文件(也没多大 5k都传不了) 使用了你们推荐的v2.0.0-beta.1这个版本 可以上传大文件了 但是AVFile这个方法只能上传一次啊 使用了两次后 第二次传的数据在_FIile有记录文件上传 但是打开后报错 document not found. 这个怎么办啊 在线等 谢谢

你好 我试过了 这个上传文件的类AVFile中的创建文件的方法都没有啊 是什么回事呢

这个接口已经在新版废弃了,之后的版本会以拓展包的方式加回来,目前建议您自己 从 Stream 封装 本地的文件然后构造 AVFile.

/// <summary>
        /// 从本地文件存储系统中创建AVFile
        /// </summary>
        /// <param name="name">文件名</param>
        /// <param name="path">e.g:/SD/Camera/AVOSCloud.jpg</param>
        /// <returns>AVFile</returns>
        public static AVFile CreateFileWithLocalPath(string name, string path)
        {
            byte[] buffer;
            FileStream fileStream;
            fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
            //#if WINDOWS_PHONE
            //            IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();

            //            fileStream = myIsolatedStorage.OpenFile(path, FileMode.Open, FileAccess.Read); 
        //#endif
        //#if NetFx45
        //            fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
        //#endif
        try
        {
            int length = (int)fileStream.Length;  // get file length
            buffer = new byte[length];            // create buffer
            int count;                            // actual number of bytes read
            int sum = 0;                          // total number of bytes read

            // read until Read method returns 0 (end of the stream has been reached)
            while ((count = fileStream.Read(buffer, sum, length - sum)) > 0)
                sum += count;  // sum is a buffer offset for next reading
        }
        finally
        {
            fileStream.Close();
        }
        return new AVFile(name, buffer);
    }

以上是旧版 SDK 的源代码,供参考。

谢谢你的帮助!!