如何从.NET将文件上传到一个驱动器

时间:2018-08-04 18:35:07

标签: c# .net

我需要维护某些文档的历史记录,我最初的解决方案是将它们从.NET复制到共享文件夹中,但这对我来说似乎并不安全。我可以通过将C#与.NET一起使用将这些文件上传到One Drive吗?如果是这样,我需要有关它的文档,我已经免费搜索了,还没有找到任何可以满足我需要的东西。如果问题太含糊,我深表歉意。谢谢。

2 个答案:

答案 0 :(得分:1)

也许这可以帮助您:

使用代码:

public string OneDriveApiRoot { get; set; } = "https://api.onedrive.com/v1.0/";

将文件上传到OneDrive

//this is main method of upload file to OneDrive 
public async Task<string> UploadFileAsync(string filePath, string oneDrivePath) 
{ 
    //get the upload session,we can use this session to upload file resume from break point 
    string uploadUri = await GetUploadSession(oneDrivePath); 

    //when file upload is not finish, the result is upload progress, 
    //When file upload is finish, the result is the file information. 
    string result = string.Empty; 
    using (FileStream stream = File.OpenRead(filePath)) 
    { 
        long position = 0; 
        long totalLength = stream.Length; 
        int length = 10 * 1024 * 1024; 

        //In one time, we just upload a part of file 
        //When all file part is uploaded, break out in this loop 
        while (true) 
        { 
        //Read a file part 
        byte[] bytes = await ReadFileFragmentAsync(stream, position, length); 

        //check if arrive file end, when yes, break out with this loop 
        if (position >= totalLength) 
        { 
            break; 
        } 

        //Upload the file part 
        result = await UploadFileFragmentAsync(bytes, uploadUri, position, totalLength); 

        position += bytes.Length; 
    } 
} 

return result; 
} 

private async Task<string> GetUploadSession(string oneDriveFilePath) 
{ 
    var uploadSession = await AuthRequestToStringAsync( 
    uri: $"{OneDriveApiRoot}drive/root:/{oneDriveFilePath}:/upload.createSession", 
    httpMethod: HTTPMethod.Post, 
    contentType: "application/x-www-form-urlencoded"); 

JObject jo = JObject.Parse(uploadSession); 

return jo.SelectToken("uploadUrl").Value<string>(); 
} 

private async Task<string> UploadFileFragmentAsync(byte[] datas, string uploadUri, long position, long totalLength) 
{ 
    var request = await InitAuthRequest(uploadUri, HTTPMethod.Put, datas, null); 
    request.Request.Headers.Add("Content-Range", $"bytes {position}-{position + datas.Length - 1}/{totalLength}"); 

return await request.GetResponseStringAsync(); 
} 

获取共享链接:(Javascript)

//This method use to get ShareLink, you can use the link in web or client terminal 
public async Task<string> GetShareLinkAsync(string fileID, OneDriveShareLinkType type, OneDrevShareScopeType scope) 
{ 
string param = "{type:'" + type + "',scope:'" + scope + "'}"; 

string result = await AuthRequestToStringAsync( 
    uri: $"{OneDriveApiRoot}drive/items/{fileID}/action.createLink", 
    httpMethod: HTTPMethod.Post, 
    data: Encoding.UTF8.GetBytes(param), 
    contentType: "application/json"); 

return JObject.Parse(result).SelectToken("link.webUrl").Value<string>(); 
} 

发件人:https://code.msdn.microsoft.com/office/How-to-upload-file-to-21125137

答案 1 :(得分:1)

初学者的简单解决方案:

  • 在您的计算机上安装 OneDrive 应用,然后登录您的帐户并为其设置一个文件夹。
  • 然后您只需要将文件复制到您在上一步中设置的文件夹中即可。它将由 OneDrive 应用程序自动同步。
File.Copy(sourceFileFullPath,OneDriveFileFullPath);