我使用MVC 3並使用AjaxUpload插件使用AJAX上傳圖像。我不想將圖像保存在文件系統中,而是將其保存到會話對象,然後輸出流以在窗體上填充圖像控件?誰會知道如何做到這一點?ASP.NET MVC 3預覽圖像
1
A
回答
1
SomeView.cshtml:
<img src="@Url.Action("/Image/Render")" />
ImageController.cs:
public ActionResult Render() {
return File((byte[])Session["Avatar"], "image/jpeg")
}
4
不知道爲什麼會永遠想這樣做(存儲在會話文件),因爲如果你有很多用戶上傳的他們的文件在同一時間,將這些文件存儲在您的網絡服務器的內存中,特別是如果這些文件很大,不會使該服務器持續很長時間。將文件存儲到文件系統是推薦的方法。
但無論如何,這裏是你如何能做到這一點(假設你沒看過或關心我以前的話):
[HttpPost]
public ActionResult Upload(MyViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
var buffer = new byte[model.File.InputStream];
model.File.InputStream.Read(buffer, 0, buffer.Length);
Session["uploadedFile"] = buffer;
return View(model);
}
其中的視圖模型文件屬性是HttpPostedFileBase
。接下來,你可以有一個控制器動作,這將成爲本文件:
public ActionResult Image()
{
byte[] buffer = (byte[])Session["uploadedFile"];
return File(buffer, "image/png");
}
,並在視圖中,您將有一個<img>
標籤指向這個動作:
<img src="@Url.Action("image")" alt="" />
當然現在的AjaxUpload plugin讓你使用AJAX上傳文件,所以你不需要重新加載整個頁面。因此,在這種情況下,您的控制器操作可以簡單地返回一個JSON對象,以指示上載過程是否成功,然後在成功回調中將<img>
標記的src
屬性設置爲將爲該文件提供服務的控制器操作。
1
一些示例代碼。將其修改爲任何你想做的事情。如果很多用戶將圖像投入到會話中,這不是一個好主意。如果短暫存在,或者長期存在,更好地將其存入數據庫中,則可以使用更永久的存儲(也許是文件系統)。
public ActionResult UploadImage()
{
foreach (string imageName in Request.Files)
{
HttpPostedFileBase file = Request.Files[imageName];
if (file.ContentLength > 0)
{
BinaryReader br = new BinaryReader(file.InputStream);
byte[] content = br.ReadBytes(file.ContentLength);
Session[imageName] = content; // better to store in a db here
}
}
return View();
}
// return the image (controller action) /mycontroller/ViewImage?imageName=whatever
public FileStreamResult ViewImage(string imageName)
{
byte[] content = (byte[])Session[imageName] ; // where ever your content is stored (ideally something other than session)
MemoryStream ms = new MemoryStream(content);
return new FileStreamResult(ms, "application/octet-stream"); // set content type based on input image, it might be png, jpg, gif etc.,
}
希望這會有所幫助。
相關問題
- 1. ASP.NET MVC 3預覽配置爲ninject
- 2. ASP.NET中的預覽圖像
- 3. 圖像預覽asp.net與C#
- 4. 圖像上傳和預覽在mvc 2
- 5. ASP.NET MVC 3預編譯
- 6. 使用Fileupload預覽圖像asp.net mvc和jquery
- 7. asp.net mvc wysiwyg編輯器w /數據庫圖像上傳/預覽
- 8. Rails 3:頁面渲染預覽圖像
- 9. 預覽圖像
- 10. ASP.NET MVC 3 WebGrid排序順序圖像
- 11. asp.net mvc 3高圖
- 12. RSS預覽圖像
- 13. CKEditor圖像預覽
- 14. AngularJS圖像預覽
- 15. Ajax圖像預覽
- 16. 預覽圖像fadein
- 17. 在ASP.NET圖像控件中預覽圖像
- 18. C#MVC 3/jQuery預覽按鈕CMS
- 19. ASP.NET MVC 2預覽1預覽2遷移
- 20. 地圖的預覽圖像
- 21. 與預覽上傳圖片的圖片框在asp.net mvc的
- 22. 在asp.net mvc中預填充Html.TextBoxFor 3
- 23. ASP.NET MVC 3本書籍預案
- 24. 在asp.net中實現「預覽」功能mvc
- 25. ASP.NET MVC預覽5路由歧義
- 26. Mono上的ASP.NET MVC預覽版5
- 27. ASP.NET MVC中的ActionUrl預覽版5
- 28. 如何在ASP.NET MVC中實現「預覽」?
- 29. asp.net mvc 2預覽2和星火
- 30. 使用ASP.NET MVC&AJAX做一個文件上傳和預覽圖像
謝謝。我明白你的意思。如果用戶上傳圖片僅用於預覽(因此可以隨時上傳其他圖片以放棄他們當前擁有的圖片),您是否建議將圖片存儲在文件系統或數據庫中? – Paul 2012-02-21 23:20:59
抱歉提出一個死的線程,但是,我會如何將圖像存儲到文件系統?我在這裏看到了很多關於它的線索,但沒有解釋如何。我應該爲那個(或網站)創建另一個子域名嗎?如果是這樣,我如何才能從我的原始網站服務器訪問?因爲他們說它不應該訪問主文件或類似的東西? – gdubs 2012-07-01 14:03:31