2014-10-02 154 views
0

我正尝试使用其REST API将文件上传到OneDrive。这就是我要完成的基础上提供的文档在OneDrive Rest API使用REST API将文件上传到Onedrive

POST https://apis.live.net/v5.0/me/skydrive/files?access_token=ACCESS_TOKEN 
Content-Type: multipart/form-data; boundary=A300x 

--A300x 
Content-Disposition: form-data; name="file"; filename="HelloWorld.txt" 
Content-Type: application/octet-stream 

Hello, World! 
--A300x-- 

这是我有:

Uri destination = new Uri(string.Format("https://apis.live.net/v5.0/{0}/files?", folder.ID)); 

BackgroundUploader uploader = new BackgroundUploader(); 
uploader.SetRequestHeader("Authorization", "Bearer " + account.AccessToken); 
uploader.SetRequestHeader("Content-Type", "multipart/form-data; boundary=\"foo_bar_baz\""); 

List<BackgroundTransferContentPart> parts = new List<BackgroundTransferContentPart>(); 

BackgroundTransferContentPart metaDataPart = new BackgroundTransferContentPart(); 
metaDataPart.SetHeader("Content-Disposition", "form-data; name=\"file\";filename=\""+content.Name+"\""); 
parts.Add(metaDataPart); 

BackgroundTransferContentPart contentPart = new BackgroundTransferContentPart(); 
contentPart.SetHeader("Content-Type", content.ContentType); 
// content is a StorageFile 
contentPart.SetFile(content); 

response.UploadOperation = await uploader.CreateUploadAsync(destination, parts, "form-data", "foo_bar_baz"); 

这条线之下会导致访问冲突错误和Windows应用商店应用程序崩溃:

response.UploadOperation = await uploader.CreateUploadAsync(destination, parts, "form-data", "foo_bar_baz"); 
+0

您是否尝试在代码周围放置try/catch块以查看是否引发了任何异常? – kiewic 2014-10-02 00:26:03

+0

异常来自cpp文件(背景api),并未捕获(异常e)块。有一个尝试绕过这整个代码。 – 2014-10-02 00:51:19

+0

提琴手或网络监视器跟踪怎么样? – kiewic 2014-10-02 04:50:37

回答

1

您正在创建两个BackgroundTransferContentPart,只将拳头加入你的'列表'。

我想你只需要一个,像这样:

List<BackgroundTransferContentPart> parts = new List<BackgroundTransferContentPart>(); 

BackgroundTransferContentPart metaDataPart = new BackgroundTransferContentPart(); 
metaDataPart.SetHeader("Content-Disposition", 
    "form-data; name=\"file\";filename=\"" + content.Name + "\""); 
metaDataPart.SetHeader("Content-Type", content.ContentType); 
metaDataPart.SetFile(content); 
parts.Add(metaDataPart); 

UPDATE:好了,上面的代码固定的访问冲突问题。为什么你是getting a 400 error is a mystery

但另一种方式来上传文件到OneDrive使用PUT方法:

Uri putUri = new Uri(string.Format("https://apis.live.net/v5.0/{0}/files/{1}", 
    "folder.a4fb14adbccd1917.A4FB14ADBCCD1917!32089", 
    content.Name)); 

BackgroundUploader uploader = new BackgroundUploader(); 
uploader.SetRequestHeader("Authorization", "Bearer " + accessToken); 
uploader.Method = "PUT"; 

UploadOperation putOperation = uploader.CreateUpload(putUri, content); 
await putOperation.StartAsync(); 

你试过PUT

+0

我试过这个,但是这给了BadRequest(400)错误。 – 2014-10-06 17:17:19

+0

我也试过PUT,它也给出了不好的要求。对你起作用吗? – 2014-10-07 20:03:33

+0

是的,它适用于我。确保使用您自己的文件夹ID。 – kiewic 2014-10-07 21:42:12