ValuesController.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Net.Http.Headers;
  6. using System.Threading.Tasks;
  7. using HaBookCms.AzureBlobStorageTest.Models;
  8. using HaBookCms.AzureStorage.AzureBlob.Container;
  9. using HaBookCms.AzureStorage.AzureBlob.Implements;
  10. using HaBookCms.AzureStorage.AzureBlob.Interfaces;
  11. using HaBookCms.AzureStorage.AzureBlob.Models;
  12. using HaBookCms.AzureStorage.AzureTable.Interfaces;
  13. using Microsoft.AspNetCore.Http;
  14. using Microsoft.AspNetCore.Mvc;
  15. using Microsoft.WindowsAzure.Storage;
  16. using Microsoft.WindowsAzure.Storage.Blob;
  17. namespace HaBookCms.AzureBlobStorageTest.Controllers
  18. {
  19. [Route("api/[controller]")]
  20. [ApiController]
  21. public class ValuesController : ControllerBase
  22. {
  23. public IAzureBlobDBRepository _azureBlobDBRepository;
  24. public IAzureTableDBRepository _azureTableDBRepository;
  25. public ValuesController(IAzureBlobDBRepository azureBlobDBRepository, IAzureTableDBRepository azureTableDBRepository) {
  26. _azureBlobDBRepository = azureBlobDBRepository;
  27. _azureTableDBRepository = azureTableDBRepository;
  28. }
  29. // GET api/values
  30. [HttpGet]
  31. public ActionResult<IEnumerable<string>> Get()
  32. {
  33. return new string[] { "value1", "value2" };
  34. }
  35. // GET api/values/5
  36. [HttpGet("{id}")]
  37. public ActionResult<string> Get(int id)
  38. {
  39. return "value";
  40. }
  41. // POST api/values
  42. [HttpPost]
  43. public void Post([FromBody] string value)
  44. {
  45. }
  46. // PUT api/values/5
  47. [HttpPut("{id}")]
  48. public void Put(int id, [FromBody] string value)
  49. {
  50. }
  51. // DELETE api/values/5
  52. [HttpDelete("{id}")]
  53. public void Delete(int id)
  54. {
  55. }
  56. [HttpPost("urls")]
  57. public async Task<IActionResult> Index()
  58. {
  59. var urls = new List<string>();
  60. var storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=teammodelstorage;AccountKey=Yq7D4dE6cFuer2d2UZIccTA/i0c3sJ/6ITc8tNOyW+K5f+/lWw9GCos3Mxhj47PyWQgDL8YbVD63B9XcGtrMxQ==;EndpointSuffix=core.chinacloudapi.cn");
  61. var blobClient = storageAccount.CreateCloudBlobClient();
  62. var container = blobClient.GetContainerReference("staticcontent");
  63. var data = await container.ListBlobsSegmentedAsync
  64. ("", true, BlobListingDetails.All, 200, null, null, null);
  65. foreach (IListBlobItem item in data.Results)
  66. {
  67. urls.Add(item.StorageUri.PrimaryUri.ToString());
  68. }
  69. return Ok(urls);
  70. }
  71. [HttpPost("Upload")]
  72. //[Produces("application/json")]
  73. //[Consumes("application/json", "multipart/form-data")]//此处为新增
  74. public async Task<List<AzureBlobModel>> Upload(IFormFile[] file )
  75. {
  76. //var storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=teammodelstorage;AccountKey=Yq7D4dE6cFuer2d2UZIccTA/i0c3sJ/6ITc8tNOyW+K5f+/lWw9GCos3Mxhj47PyWQgDL8YbVD63B9XcGtrMxQ==;EndpointSuffix=core.chinacloudapi.cn");
  77. //var blobClient = storageAccount.CreateCloudBlobClient();
  78. //var container = blobClient.GetContainerReference("staticcontent");
  79. ////var file = picture.File;
  80. //foreach (IFormFile f in file) {
  81. // var parsedContentDisposition =
  82. // ContentDispositionHeaderValue.Parse(f.ContentDisposition);
  83. // var filename = Path.Combine(parsedContentDisposition.FileName.Trim('"'));
  84. // var blockBlob = container.GetBlockBlobReference(filename+Guid.NewGuid());
  85. // await blockBlob.UploadFromStreamAsync(f.OpenReadStream());
  86. //}
  87. List<AzureBlobModel> blobModels= _azureBlobDBRepository.UploadFiles(file, new FileContainer()).Result.ToList<AzureBlobModel>();
  88. await _azureTableDBRepository.SaveAll<AzureBlobModel>(blobModels);
  89. return blobModels;
  90. }
  91. [HttpGet("Download")]
  92. //[Produces("application/json")]
  93. //[Consumes("application/json", "multipart/form-data")]//此处为新增
  94. public async Task<IActionResult> Download()
  95. {
  96. var storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=teammodelstorage;AccountKey=Yq7D4dE6cFuer2d2UZIccTA/i0c3sJ/6ITc8tNOyW+K5f+/lWw9GCos3Mxhj47PyWQgDL8YbVD63B9XcGtrMxQ==;EndpointSuffix=core.chinacloudapi.cn");
  97. var blobClient = storageAccount.CreateCloudBlobClient();
  98. var container = blobClient.GetContainerReference("staticcontent");
  99. string url = "https://teammodelstorage.blob.core.chinacloudapi.cn/staticcontent/234fa2a1-7309-4241-886f-c58ae195f9da.pdf";
  100. CloudBlockBlob blockBlob = container.GetBlockBlobReference("234fa2a1-7309-4241-886f-c58ae195f9da.pdf");
  101. using (var fileStream = System.IO.File.OpenWrite(@"F:\234fa2a1-7309-4241-886f-c58ae195f9da.pdf"))
  102. {
  103. await blockBlob.DownloadToStreamAsync(fileStream);
  104. }
  105. //var file = picture.File;
  106. //foreach (IFormFile f in file)
  107. //{
  108. // var parsedContentDisposition =
  109. // ContentDispositionHeaderValue.Parse(f.ContentDisposition);
  110. // var filename = Path.Combine(parsedContentDisposition.FileName.Trim('"'));
  111. // var blockBlob = container.GetBlockBlobReference(filename + Guid.NewGuid());
  112. // await blockBlob.UploadFromStreamAsync(f.OpenReadStream());
  113. //}
  114. return Ok();
  115. }
  116. }
  117. }