Upload file to Windows Azure with only the link of the file is provided

百般思念 提交于 2019-12-13 03:39:24

问题


How can I upload a file in azure if I only have the URL of the file to upload. In this case, i 'm using Dropbox file chooser which selects file from dropbox and returns its url path. eq

https://www.dropbox.com/s/o9myet72y19iaan/Getting%20Started.pdf

Now we need the file to be stored in Windows Azure blob. What is the easiest way to do this without downloading the file first. I'm planning to use a asp.net web api for the uploading of file to azure blob.


回答1:


At first, I thought it should be quite straight forward as Azure Blob Storage support copying blobs from external URL however I don't think this would work in case of Dropbox files. I just tried it and got an error even though.

The link you mentioned above is not the direct link to the file. It's a link to a page on Dropbox's website from where you can download a file. This is obviously you don't want. Here's an alternate solution which you can try:

Replace www.dropbox.com in your URL with dl.dropboxusercontent.com (based on @smarx's comments below) and use that URL in the following code:

First you would need to append dl=1 to your request URL as query string. So your Dropbox URL would be https://www.dropbox.com/s/o9myet72y19iaan/Getting%20Started.pdf?dl=1. dl query string parameter indicates the file needs to be downloaded.

Next, using HTTPWebRequest try accessing this URL. Dropbox will respond back with another link and 302 status code. This link would be something like https://dl.dropboxusercontent.com/s/o9myet72y19iaan/Getting%20Started.pdf?token_hash=<tokenhash>.

Use this link in the code below to copy file. This would work.

        CloudStorageAccount acc = new CloudStorageAccount(new StorageCredentials("account", "key"), false);
        var client = acc.CreateCloudBlobClient();
        var container = client.GetContainerReference("container-name");
        container.CreateIfNotExists();
        var blob = container.GetBlockBlobReference("dropbox-file-name");
        blob.StartCopyFromBlob(new Uri("dropbox URL with dl.dropboxusercontent.com"));
        Console.WriteLine("Copy request accepted");
        Console.WriteLine("Now checking for copy state");
        bool continueLoop = true;
        do
        {
            blob.FetchAttributes();
            var copyState = blob.CopyState;
            switch (copyState.Status)
            {
                case CopyStatus.Pending:
                    Console.WriteLine("Copy is still pending. Will check status again after 1 second.");
                    System.Threading.Thread.Sleep(1000);//Copy is still pending...check after 1 second
                    break;
                default:
                    Console.WriteLine("Terminating process with copy state = " + copyState.Status);
                    continueLoop = false;
                    break;
            }
        }
        while (continueLoop);
        Console.WriteLine("Press any key to continue.");


来源:https://stackoverflow.com/questions/23484650/upload-file-to-windows-azure-with-only-the-link-of-the-file-is-provided

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!