如何通过文件流上传/更新文件和C#中的可恢复上传

时间:2012-06-09 15:43:15

标签: c# filestream gdata google-docs-api google-drive-api

我想通过Google Documents List API(C#)中的System.IO.FileStream上传/更新文件?

我使用以下两种方式:Google.GData.Client.ResumableUpload.ResumableUploader
   (1)public void UpdateAsync(Authenticator authentication,AbstractEntry payload,object userData)
   (2)public void UpdateAsync(Authenticator authentication,Uri resumableUploadUri,Stream payload,string contentType,object userData)

(1)成功 (2)403 Forbidden或其他...... B1失败
那么,是否有人有关于(2)的任何示例代码?

我的代码(2): 此代码由 Claudio Cherubino 的示例代码编辑,用于将文件流上传到Google文档(云端硬盘)。但文件(DocumentEntry)的名称在Google云端硬盘的页面上显示为“无标题”。似乎'slu''不起作用。我是否会错过一些重要设置?

Google.GData.Documents.DocumentsService conn =
new Google.GData.Documents.DocumentsService("TestSend");
conn.setUserCredentials("UserName", "UserPass");

string path = @"D:\test_file\test.exe"; 

Google.GData.Client.ResumableUpload.ResumableUploader send =
new Google.GData.Client.ResumableUpload.ResumableUploader();
send.AsyncOperationCompleted += new Google.GData.Client.AsyncOperationCompletedEventHandler(
    delegate(object sender,
        Google.GData.Client.AsyncOperationCompletedEventArgs e)
    {
        System.Windows.Forms.MessageBox.Show("File Send Done");
    }
);

System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite);

send.InsertAsync(
    new Google.GData.Client.ClientLoginAuthenticator("TestSend", "writely", this._DiskConn.Credentials),
    new System.Uri("https://docs.google.com/feeds/upload/create-session/default/private/full?v=3"),
    fs,
    "application/octet-stream",
    System.IO.Path.GetFileName(path),
    new object()
);

1 个答案:

答案 0 :(得分:0)

请尝试以下代码:

DocumentsService service = new DocumentsService("MyDocumentsListIntegration-v1");
ClientLoginAuthenticator authenticator = new ClientLoginAuthenticator(APPLICATION_NAME, ServiceNames.Documents, USERNAME, PASSWORD);

string slug = "Legal contract";
MediaFileSource mediaSource = new MediaFileSource("c:\\contract.txt", "text/plain");
Uri createUploadUrl = new Uri("https://docs.google.com/feeds/upload/create-session/default/private/full?v=3");

ResumableUploader ru = new ResumableUploader();
ru.InsertAsync(authenticator, createUploadUrl, mediaSource.GetDataStream(), mediaSource.ContentType, slug, new object());