我正在使用Dropbox的.Net SDK将文件上传到我的Dropbox并使用有效的访问令牌。从" localhost"。
执行时,代码工作正常但是在Azure服务器上部署相同代码,代码无法执行,并且Dropbox没有返回任何错误/响应,也没有文件上传。
Dropbox确认代码的行为在所有.NET环境中都应该相同。他们声称可能是因为Azure服务器防火墙或防病毒安全可能会阻止对Dropbox的请求。
有人可以帮我解决这个问题,使其在Azure环境中运行,或者如何在Azure服务器中跟踪防火墙阻止的请求?
以下是示例代码
public async Task<bool> UploadFile(string accesstoken, string folder, string filename, byte[] file)
{
try
{
using (var client = new HttpClient())
{
using (var dropbox = new Dropbox.Api.DropboxClient(accesstoken))
{
var response = await dropbox.Files.UploadAsync("/" + folder + "/" + filename, WriteMode.Overwrite.Instance, body: new MemoryStream(file));
}
}
return true;
}
catch (Exception ex)
{
throw ex;
}
}
获得了上述内容
答案 0 :(得分:1)
如果要保存的路径中有空格,DropBox SDK会发生错误。只有在动态设置路径时才会发生这种情况。
在代码示例中,如果folder
或filename
有空格,则通话无效。如果您使用的是文字字符串,那么空格就可以了。
不确定SDK中发生了什么,但可以在测试项目中显示此行为。
为了让它更加混乱,这适用于localhost,但不适用于我们编写测试应用程序并将其部署到Azure!
答案 1 :(得分:1)
是。问题在于路径的文件夹名称及其空格。
我们使用的替代方法是使用Core API而不是使用SDK将文件上传到Dropbox。
https://www.dropbox.com/developers-v1/core/docs
下面的代码适用于Core API
public async Task<bool> UploadFile(string accesstoken, string foldername, string filename, byte[] file)
{
try
{
string url = "https://content.dropboxapi.com/1/files/auto/" + foldername;
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accesstoken);
var requestContent = new MultipartFormDataContent();
var fileContent = new StreamContent(new MemoryStream(file));
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
Name = "\"file\"",
FileName = "\"" + filename + "\""
};
fileContent.Headers.ContentType =
MediaTypeHeaderValue.Parse(MimeMapping.GetMimeMapping(filename));
requestContent.Add(fileContent);
var response = await client.PostAsync(url, requestContent);
return response.IsSuccessStatusCode;
}
}
catch (Exception ex)
{
throw;
}
}
然后SDK的另一个问题是,Task.wait()或Task.Result长时间没有收到来自Dropbox的任何响应,并且发生超时/任务cacelled异常。