0

我需要读取从 Ios 应用程序发送到 Azure Web api 的文件。

我需要将其上传到 blob 并保留 Uri。

任何人都可以建议我接受已发送文件的代码。

 /// <summary>
    ///This is to upload the image file for the user profile.
    /// </summary>
    ///<param name="userRegId"> </param>
    ///<returns></returns>
    [HttpPost]
    public Response ImageUpload(int  userRegId)
    {
        try
        {
            var response = new Response();
            if (!Request.Content.IsMimeMultipartContent())
            {
                response.status = CommonHandler.GetInvalidStatus();
            }
            else
            {

                //here i want to read the file and upload it to blob.


                string fileName =Request.Files[0].FileName;//unable to do this. Here i want to know ho to read the file
                string uniqueBlobName = string.Format("{0}/{1}", constants.pdf, fileName);
                CloudBlobClient blobStorage = cloudClasses.CreateOrGetReferenceOfBlobStorage(constants.pdf);
                CloudBlockBlob blob = cloudClasses.ClouBblockBlobPropertySetting(blobStorage, uniqueBlobName, ".pdf");
                blob.UploadFromStream(Request.Files[0].InputStream);//unable to do this.  Here i want to know ho to read the file
                response.status = CommonHandler.GetSuccessStatus();
            }
            return response;
        }
        catch (Exception ex)
        {
            _logger.LogError(Log4NetLogger.Category.Exception, "Error in : APIController.ImageUpload :>> Exception message: " + ex.Message);
            return new Response { status = CommonHandler.GetFailedStatus(ex.Message) };

        }
    }
4

2 回答 2

3

这是我的代码,

var streamProvider = new MultipartMemoryStreamProvider();
                Request.Content.ReadAsMultipartAsync(streamProvider);
                foreach (var content in streamProvider.Contents)
                {
                    if (content != null)
                    {
                        if (content.Headers.ContentDisposition.FileName != null)
                        {
                            var fileName =
                                content.Headers.ContentDisposition.FileName.Replace("\"", string.
                                                                                              Empty);
                            Stream stream = content.ReadAsStreamAsync().Result;
                            CloudBlobContainer blobStorage = BlobHandler.GetBlobStorage("profileimage");
                            CloudBlockBlob blob = BlobHandler.BlobPropertySetting(blobStorage,
                                                                                  Guid.NewGuid().ToString().ToLower() +
                                                                                  fileName);
                            blob.UploadFromStream(stream);
                            response = ProfileHandler.ImageUpdate(userRegId, blob.Uri);
                        }
                    }
                }

对于 blobHandler

public static CloudBlobContainer GetBlobStorage(string cloudBlobContainerName)
    {
        CloudBlobContainer container;
        try
        {
            var storageAccount = CloudStorageAccount.FromConfigurationSetting("StorageConnectionString");
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
            container = blobClient.GetContainerReference(cloudBlobContainerName); //profile
            container.CreateIfNotExist();
            var permissions = container.GetPermissions();
            permissions.PublicAccess = BlobContainerPublicAccessType.Container;
            container.SetPermissions(permissions);
        }
        catch (Exception ex)
        {
            Logger.LogError(Log4NetLogger.Category.Exception, "Error in : BlobHandler.GetBlobStorage :>> Exception message: " + ex.Message);
            throw;
        }
        return container;
    }
    public static CloudBlockBlob BlobPropertySetting(CloudBlobContainer cloudBlobClientReferenceName, string blobContentName)
    {
        CloudBlockBlob blob = cloudBlobClientReferenceName.GetBlockBlobReference(blobContentName);

        //blob.Properties.ContentType = contentType;
        return blob;
    }

希望这会对某人有所帮助..

于 2013-10-11T09:18:27.480 回答
1

Yao Huang Lin 写了一篇关于如何生成由 Azure Blob 存储支持的 Web API 文件服务的博客文章。你可以在这里找到它。

于 2013-10-10T07:44:52.527 回答