私は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
今まであなたは、ユーザーのアップロードをたくさん持っている場合ので、それは(セッション中にファイルを保存)したいと思う理由は考えそれらのファイルを同時に保存し、それらのファイルをWebサーバーのメモリに格納すると、特にこれらのファイルが大きい場合、このサーバーは非常に長くなりません。ファイルシステムにファイルを格納することをお勧めします。
しかし、いずれにせよ、ここ(あなたが読んだり、私の以前の発言を気にしませんでしたと仮定して)あなたがそれを行うことができる方法です:ビューモデルのファイルのプロパティはHttpPostedFileBase
[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);
}
です。
<img src="@Url.Action("image")" alt="" />
今のコースAjaxUpload pluginは、あなたがすることができます:
public ActionResult Image()
{
byte[] buffer = (byte[])Session["uploadedFile"];
return File(buffer, "image/png");
}
と
がビューにこのアクションを指す<img>
タグを持っています。次は、このファイルを提供しますコントローラのアクションを持つことができますAJAXを使用してファイルをアップロードするので、ページ全体をリロードする必要はありません。この場合、コントローラのアクションは単にアップロードプロセスが成功したかどうかを示すJSONオブジェクトを返すだけで、成功コールバックで
<img>
タグの
src
プロパティをファイルを提供するコントローラアクションに設定することができます。
1
いくつかのコード例。あなたがやりたいことに変更してください。たくさんのユーザーがいる場合、イメージをセッションにスリングするのは良い考えではありません。短命の場合、または長生きの場合は、より永続的なストレージ(ファイルシステムかもしれません)の場合は、dbに貼り付けるのがよいでしょう。
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 wysiwygエディタw /データベース画像アップロード/プレビュー
- 2. MVC 3画像ボタン
- 3. 画像アップロード画像プレビュー
- 4. RSSプレビュー画像
- 5. ASP.Net MVC 2画像アップロード
- 6. javascriptの画像プレビュー
- 7. TKinter:画像プレビュー - ボタン
- 8. 画像プレビューとウェブワーカー
- 9. ASP.net MVC 3でHTMLフォームから画像を保存するC#
- 10. ASP.NET MVC 3は、Asp.net MVC 3ではデータベース
- 11. ASP.NET MVC 3の学習計画
- 12. MVC 3 EFを使用した画像
- 13. MVC 3画像フィールドの有効化
- 14. アップロード前に画像をプレビュー
- 15. 画像プレビュー用AJAXファイルアップローダ
- 16. iOSアプリのプレビュー画像
- 17. 画像プレビューJavaScript with mouseover
- 18. jQueryによる画像プレビュー
- 19. プレビュー画像なし私のサーバにアップロード
- 20. ASP.NET MVC 3カミソリショーダイアログ
- 21. ASP.NET MVC 3リアルタイムイベント。
- 22. ASP.Net MVC 3 AutoMapper
- 23. asp.net mvc 3 highchart
- 24. ASP.NET MVC 3:EF
- 25. ASP.Net MVC 3 Grid
- 26. ASP.NET MVC 3 - カスタムバリデータ
- 27. Asp.net MVC 3キャッシング
- 28. ASP.NET MVC 3プリコンパイル
- 29. ASP.NET MVC 3 ModelState
- 30. ASP.NET MVC 3 RC
ありがとうございます。私はセッションについてあなたが何を意味するのかを見ます。ユーザーがプレビューのためだけに画像をアップロードしている場合(現在の画像を破棄するためにいつでも別の画像をアップロードすることができます)、ファイルシステムやデータベースに保存することをお勧めしますか? – Paul
デッドスレッドを残して申し訳ありませんが、イメージをファイルシステムに保存するにはどうすればいいですか? iveはここでそれについて多くのスレッドを見ましたが、その方法を説明するものは何もありません。他のサブドメインを作成する必要がありますか?もしそうなら、元のウェブサイトサーバーからどのようにアクセスできますか?彼らはそれがメインファイルやそれに類するものにアクセスできべきではないと言いましたか? – gdubs