gpt4 book ai didi

asp.net-mvc - 将图片上传到 Windows Azure 网站

转载 作者:行者123 更新时间:2023-12-04 00:06:47 25 4
gpt4 key购买 nike

我有一个 ASP.NET MVC 4 应用程序,我想将其部署到 Windows Azure。该应用程序的一部分涉及上传图片。当图片上传后,我想将图片存储在位于 /pictures/uploaded 的目录中。

我的问题是,如何将图片上传到 Windows Azure 上托管的应用程序内的相对路径?到目前为止,我的应用程序已托管在虚拟机中。我能够通过使用以下内容来完成上述操作:

string path = ConfigurationManager.AppSettings["rootWebDirectory"] + "/pictures/uploaded;

// Get the file path
if (Directory.Exists(path) == false)
Directory.CreateDirectory(path);

string filePath = path + "/uploaded" + DateTime.UtcNow.Milliseconds + ".png";
filePath = filePath.Replace("/", "\\").Replace("\\\\", "\\");

// Write the picture to the file system
byte[] bytes = GetPictureBytes();
using (FileStream fileStream = new FileStream(filePath, FileMode.Create))
{
fileStream.Write(bytes, 0, bytes.Length);
fileStream.Flush();
fileStream.Close();
}

目前,ConfigurationManager.AppSettings["rootWebDirectory"] 指向绝对路径。我相信这就是我的问题所在。我不知道如何将所有这些切换到相对路径。

谢谢!

最佳答案

这是我对如何在 azure 中进行设置的简单描述。 http://geekswithblogs.net/MagnusKarlsson/archive/2012/12/02/how-to-use-azure-storage-for-images.aspx

//编辑;这是我博客中的完整示例(如果博客消失了)。 yourViewName.cshtml

 @model List<string>  
@{
ViewBag.Title = "Index";
}

<h2>Index</h2>
<form action="@Url.Action("Upload")" method="post" enctype="multipart/form-data">

<label for="file">Filename:</label>
<input type="file" name="file" id="file1" />
<br />
<label for="file">Filename:</label>
<input type="file" name="file" id="file2" />
<br />
<label for="file">Filename:</label>
<input type="file" name="file" id="file3" />
<br />
<label for="file">Filename:</label>
<input type="file" name="file" id="file4" />
<br />
<input type="submit" value="Submit" />

</form>

@foreach (var item in Model) {

<img src="@item" alt="Alternate text"/>
}

您的 Controller 操作

public ActionResult Upload(IEnumerable<HttpPostedFileBase> file)
{
BlobHandler bh = new BlobHandler("containername");
bh.Upload(file);
var blobUris=bh.GetBlobs();

return RedirectToAction("Index",blobUris);
}

你的模型

 public class BlobHandler
{
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));

private string imageDirecoryUrl;

/// <summary>
/// Receives the users Id for where the pictures are and creates
/// a blob storage with that name if it does not exist.
/// </summary>
/// <param name="imageDirecoryUrl"></param>
public BlobHandler(string imageDirecoryUrl)
{
this.imageDirecoryUrl = imageDirecoryUrl;
// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Retrieve a reference to a container.
CloudBlobContainer container = blobClient.GetContainerReference(imageDirecoryUrl);

// Create the container if it doesn't already exist.
container.CreateIfNotExists();

//Make available to everyone
container.SetPermissions(
new BlobContainerPermissions
{
PublicAccess = BlobContainerPublicAccessType.Blob
});
}

public void Upload(IEnumerable<HttpPostedFileBase> file)
{
// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Retrieve a reference to a container.
CloudBlobContainer container = blobClient.GetContainerReference(imageDirecoryUrl);

if (file != null)
{
foreach (var f in file)
{
if (f != null)
{
CloudBlockBlob blockBlob = container.GetBlockBlobReference(f.FileName);
blockBlob.UploadFromStream(f.InputStream);
}
}
}
}

public List<string> GetBlobs()
{
// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference(imageDirecoryUrl);

List<string> blobs = new List<string>();

// Loop over blobs within the container and output the URI to each of them
foreach (var blobItem in container.ListBlobs())
blobs.Add(blobItem.Uri.ToString());

return blobs;
}
}

关于asp.net-mvc - 将图片上传到 Windows Azure 网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14323548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com