[英]Using sendAsBinary with ASP.Net MVC
我正在嘗試使用以下內容允許用戶將照片拖到頁面上並上傳這些照片。
現在,我一直在嘗試使它的模型綁定起作用,但是到目前為止,內置的東西還算不上什么。有人知道我如何使它起作用嗎???
作為備份,我知道我使用InputStream將發送的數據作為字符串拉出,然后將其序列化到我的對象中...
var stream = this.Request.InputStream;
var result = "";
using (var reader = new StreamReader(stream))
{
result = reader.ReadToEnd();
}
var serializer = new JavaScriptSerializer();
var typedObjectResult = serializer.Deserialize<UploadInput>(result);
但是我已經將消息的圖像部分轉換為字節數組,然后將其保存到文件中。 圖像的字符串內容如下所示。
data:image/jpeg;base64,/9j/4RjhRXhpZg........3Xuve9de6//9k=
如何將其另存為圖像? 我是否應該能夠將字節數組寫入文件?
但是我主要關心的是正確綁定模型。
干杯
好,讓我們付諸行動。 與往常一樣,首先定義視圖模型:
public class ImageData
{
public string Description { get; set; }
public string Filename { get; set; }
public string Image { get; set; }
}
然后是一個控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(IEnumerable<ImageData> images)
{
foreach (var item in images ?? Enumerable.Empty<ImageData>())
{
var tokens = item.Image.Split(',');
if (tokens.Length > 1)
{
var buffer = Convert.FromBase64String(tokens[1]);
var file = Path.Combine(HttpContext.Server.MapPath("~/"), item.Filename);
System.IO.File.WriteAllBytes(file, buffer);
}
}
return Json(new { Status = "OK" });
}
}
最后是一個視圖:
<div id="uploadArea" style="background-color: yellow; width: 170px; height: 50px;">
drop images here
</div>
@Html.ActionLink("Upload images", "index", null, new { id = "upload" })
<div id="imagesContainer" />
<script type="text/javascript">
$('#uploadArea').bind('dragover', function (event) {
event.preventDefault();
}).bind('drop', function (event) {
event.preventDefault();
var files = event.originalEvent.dataTransfer.files;
$.each(files, function (index, file) {
var img = $('<img/>')
.addClass('droppedImage')
.attr('data-filename', file.name);
$('#imagesContainer').append(img);
img.file = file;
var reader = new FileReader();
reader.onloadend = function () {
img.attr('src', reader.result);
}
reader.readAsDataURL(file);
});
});
$('#upload').click(function () {
var imagesJson = $('.droppedImage').map(function () {
var $this = $(this);
return {
image: $this.attr('src'),
filename: $this.attr('data-filename')
};
}).toArray();
$.ajax({
url: this.href,
type: 'POST',
data: JSON.stringify({ images: imagesJson }),
contentType: 'application/json',
success: function (result) {
alert('success');
}
});
return false;
});
</script>
現在啟動您的HTML 5兼容瀏覽器並玩得開心。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.