由于没有对Unity3d和Dropbox的官方支持,我使用的是HTTP API。我可以使用代码流(通过在Unity3d中使用Application.OpenURL)执行oauth2/authorize,也可以执行oauth2/token Post部分(因此我可以登录并获得从oauth2/authorize获得的代码)。
问题是我真的不知道如何上传和下载文件。我尝试的内容(此代码位于协同例程中):
Dictionary<string, string> postHeader = new Dictionary<string, string>();
postHeader.Add("Authorization", "Bearer <code>");
postHeader.Add("Dropbox-API-Arg", "{\"path\": \"/uploadtry.json\",\"mode\": \"overwrite\",\"autorename\": true,\"mute\": false}");
postHeader.Add("Content-Type", "application/octet-stream");
byte[] myData = System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(Application.persistentDataPath + "/" + "uploadtry.json"));
using (WWW www = new WWW("https://content.dropboxapi.com/2/files/upload", myData, postHeader)) {
yield return www;
if (www.error != null) {
Debug.Log(www.error);
} else {
Debug.Log("Success! " + www.text);
}
}
我从中得到错误400。
Dropbox医生说
curl -X POST https://content.dropboxapi.com/2/files/upload \
--header "Authorization: Bearer <code>" \
--header "Dropbox-API-Arg: {\"path\": \"/Homework/math/Matrices.txt\",\"mode\": \"add\",\"autorename\": true,\"mute\": false}" \
--header "Content-Type: application/octet-stream" \
--data-binary @local_file.txt
我确信我的帖子是正确的,因为我对登录部分也做了同样的事情。我确信承载头是正确的。我不确定Dropbox-API-Arg的路径部分是正确的...我的应用程序只能访问它自己的文件夹,但我真的不知道我是否应该始终使用完整的路径...我还是尝试了一下,但我得到了同样的错误(我从“Applazion i”意大利语复制了路径,用于在授权部分和MyAppName之后自动创建的应用程序...我没有尝试将 /home/添加到路径中)。我不确定覆盖是否与autorename true兼容。我不确定我是否必须使用应用程序/八位流或应用程序/json,但我两者都尝试了,得到了相同的错误400。
所以我认为问题可能是--data-二进制。现在我读取所有文件文本并将其转换为字节数组......通常这适用于-d(data),但可能这对于--data-二进制是错误的。
我还尝试从dropbox生成访问令牌(避免授权部分的临时解决方案,唯一适用于您自己的帐户...因为我不知道承载代码是否会过期),但这没有帮助。我仍然得到错误400。
随下载:
https://content.dropboxapi.com/2/files/download
我没有收到任何错误。但我不知道如何决定下载文件夹,所以我没有得到任何文件。
https://www.dropbox.com/developers/documentation/http/documentation#files-download
我不明白如何在(GET?)中指定下载文件夹?我真的很困惑。
编辑。我从linux终端尝试了curl(在家里我使用Windows,所以我没有curl),并且我能够使用curl上传和下载(我对它从应用程序文件夹开始的路径的看法是正确的,所以/uploadtry.json很好。承载工作。覆盖与autorename true兼容,Content-type Application/octet-stream很好。此外,只有获取打印文件,所以我真的不知道为什么它不能正常工作,没有错误(但它很晚了,也许下载的问题是代码中的错误,我今天会再试一次)。
唯一真正的区别是,在Unity中,我将文件作为文本阅读-
编辑2。再次尝试下载,但仍不起作用。错误400错误请求
源自curl
curl -X POST https://content.dropboxapi.com/2/files/download --header "Authorization: Bearer <code>" --header "Dropbox-API-Arg: {\"path\": \"/prova.json\"}"
这正在工作,并将字符串返回到终端。
在Unity3d上
Dictionary<string, string> postHeader = new Dictionary<string, string>();
postHeader.Add("Authorization", "Bearer <code>");
postHeader.Add("Dropbox-API-Arg", "{\"path\": \"/prova.json\"}");
using (WWW www = new WWW("https://content.dropboxapi.com/2/files/download", null, postHeader)){
yield return www;
if (www.error != null){
Debug.Log(www.error);
}else{
Debug.Log("Success! " + www.text);
}
}
这不起作用。
我真的不知道我做错了什么。
编辑3。
出于某种原因,上载代码实际上正在工作。可能是操作系统,也可能是unity版本(他们昨天更新了,但在家里我仍在使用旧版本…)无论如何,现在唯一的问题是我仍然不知道如何下载。
编辑4。
好的新问题。我尝试了UnityWebRequest类(对于Post不起作用),然后我换了一个Get(因为curl仍然有效。使用此代码下载返回成功......但使用空文件
using (UnityWebRequest www = UnityWebRequest.Get("https://content.dropboxapi.com/2/files/download"))
{
www.SetRequestHeader("Authorization", "Bearer <code>");
www.SetRequestHeader("Dropbox-API-Arg", "{\"path\": \"/prova.json\"}");
yield return www;
if (www.error != null)
{
Debug.Log(www.error);
}
else
{
Debug.Log("Success! " + www.downloadHandler.data.Length);
}
}
好的,多亏了格雷格·萨格西翁(GregSuggesion),我才能够思考一些关于谷歌下载问题的问题。正如我所说,上传是可行的(即使是在2018.1版的Unity3d上。我会在这篇文章之后上传,看看2018.2是否仍然有效)。我真的不知道昨天为什么我不能上传文件(可能是我的代码错了,比如在url中,我没有注意到)。
无论如何,对于下载部分,我终于能够理解问题所在:内容类型。下载时,Dropbox需要一个空的“”内容类型(但我在文档中没有看到它,我可以在这里找到此信息:Dropbox下载文件API停止工作,出现400错误)。
从那里解决问题很容易。我再次使用了WWW类(UnityWebRequest Post由于某种原因仍处于中断状态),通过这段代码,我可以获得json文件的文本(只添加了一个标题):
Dictionary<string, string> postHeader = new Dictionary<string, string>();
postHeader.Add("Authorization", "Bearer <code>");
postHeader.Add("Dropbox-API-Arg", "{\"path\": \"/provaupload.json\"}");
postHeader.Add("Content-Type", "");
using (WWW www = new WWW("https://content.dropboxapi.com/2/files/download", null, postHeader)) {
yield return www;
if (www.error != null) {
Debug.Log(www.error + " " + www.text);
} else {
Debug.Log("Success! " + www.text);
}
}
最后,我可以完成我的save cloud解决方案。
问题内容: 设置INTERNET_ACCESS等后,出现此错误。 这是我测试过的代码的另一部分,仍然收到该异常 } 问题答案: “ftp.194.90.81.149”: No address associated with hostname 您收到UnknownHostException的事实意味着ftp.194.90.81.149在DNS中不是真实的主机名。我怀疑其中的数字部分是您真正想要的。即
本文向大家介绍Jsp+Servlet实现文件上传下载 文件上传(一),包括了Jsp+Servlet实现文件上传下载 文件上传(一)的使用技巧和注意事项,需要的朋友参考一下 文件上传和下载功能是Java Web必备技能,很实用。 本文使用的是Apache下的著名的文件上传组件 org.apache.commons.fileupload 实现 下面结合最近看到的一些资料以及自己的尝试,先写第一篇文件上
本文向大家介绍linux下上传下载文件夹的方法,包括了linux下上传下载文件夹的方法的使用技巧和注意事项,需要的朋友参考一下 Linux下目录复制:本机->远程服务器 test1为源目录,test2为目标目录,zhidao@192.168.0.1为远程服务器的用户名和ip地址。 Linux下目录复制:远程服务器->本机 zhidao@192.168.0.1为远程服务器的用户名和ip地址,test
本文向大家介绍C++文件上传、下载工具,包括了C++文件上传、下载工具的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C++文件上传下载的实现代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助。
我试图用PythonAnywhere和Flask编写一个非常简单的webapp,它允许用户上传文本文件,生成csv文件,然后让用户下载csv文件。不一定要花哨,只要管用就行了。我已经编写了从驱动器上的txt文件生成csv的程序。 现在,我的函数用以下命令打开驱动器上的文件:
我需要创建一个从APIendpoint下载文件并将其上传到另一个APIendpoint的进程。该文件的最大大小为100MB,但我们将有许多进程并行运行。我试图用Spring WebClient实现它,而不需要将文件存储在内存中。当前代码将文件存储在内存中,因为使用大文件的测试会抛出OutofMemoryError。