从网址上传图片到Azure Blob存储

4
有可能让CloudBlockBlob.UploadFromStreamAsync接受图片URL吗? 我想使用LinkedIn basicprofile api来检索用户的图片URL(已获取URL),并尝试下载和上传该图片到Azure Blob,就像他们从计算机中选择了一张图片。
以下是目前的情况:
using (Html.BeginForm("UploadPhoto", "Manage", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
      <div class="browseimg">
          <input type="file" class="display-none" name="file" id="files" onchange="this.form.submit()" />
      </div>
 }
 <button class="btn btn-primary width-100p main-bg round-border-bot" id="falseFiles">
       Upload billede
 </button>

控制器中的方法:

public async Task<ActionResult> UploadPhoto(HttpPostedFileBase file)
{

    if (file != null && file.ContentLength > 0)
    {
        var fileExt = Path.GetExtension(file.FileName);
        if (fileExt.ToLower().EndsWith(".png") 
             || fileExt.ToLower().EndsWith(".jpg") 
             || fileExt.ToLower().EndsWith(".gif"))
        {
            var user = await GetCurrentUserAsync()
            await service.Upload(user.Id, file.InputStream);
        }
   }
    return RedirectToAction("Index")
}

不,这是不可能的,但从我所看到的,您正在以文件形式上传,而不是URL。您是手动下载图片吗? - SilentTremor
是的,这就是那个方法,它可以选择你从电脑中选择的文件并上传。不知道是否有可能。我将尝试从读取URL的流中放入它,并上传该流或其他什么东西。 - crystyxn
我正在为您创建一个简单的任务。 - SilentTremor
看起来webclient可以工作。你有更好的想法吗? - crystyxn
不用了,如果你觉得可以的话就用那个。 - SilentTremor
2个回答

5
以下方法将文件(URL)上传到Azure CloudBlob。
注意:此方法的输入示例为“file = http://example.com/abc.jpg”,且“ImageName = myimage.jpg”。
public static void UploadImage_URL(string file, string ImageName)
{
    string accountname = "<YOUR_ACCOUNT_NAME>";

    string accesskey = "<YOUR_ACCESS_KEY>";

    try
    {

        StorageCredentials creden = new StorageCredentials(accountname, accesskey);

        CloudStorageAccount acc = new CloudStorageAccount(creden, useHttps: true);

        CloudBlobClient client = acc.CreateCloudBlobClient();

        CloudBlobContainer cont = client.GetContainerReference("<YOUR_CONTAINER_NAME>");

        cont.CreateIfNotExists();

        cont.SetPermissions(new BlobContainerPermissions
        {
            PublicAccess = BlobContainerPublicAccessType.Blob

        });
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(file);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream inputStream = response.GetResponseStream();
        CloudBlockBlob cblob = cont.GetBlockBlobReference(ImageName);
        cblob.UploadFromStream(inputStream);
    }
    catch (Exception ex){ ... }

}

弃用的包 - Jonathan Laliberte

2
看起来我所需要的只是一个简单的

标签。

 WebClient wc = new WebClient();
 MemoryStream stream = new MemoryStream(wc.DownloadData("https://media.licdn.com/mpr/..."));

然后

await service.Upload(user.Id, stream);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接