1

我是 Ember.js 的新手,我遇到了一个问题,我需要将上传的图像保存在 db 中,但我不知道该怎么做,我编写了上传图像的代码,但我坚持将其传递给服务器我当前的代码如下

应用程序.js

App = Ember.Application.create();

App.PreviewImageView = Ember.View.extend({
        attributeBindings: ['name', 'width', 'height', 'src'],
        tagName: 'img',
        viewName: 'previewImageView',
        printme: function () {
            console.log('in previewImageView');
        }
});
App.FileField= Ember.TextField.extend({
    type: 'file',
    attributeBindings: ['name'],
    change: function (evt) {
        var input = evt.target;
        if (input.files && input.files[0]) {
            var reader = new FileReader();
            reader.onload = function (e) {
                this.$().parent(':eq(0)').children('img:eq(0)').attr('src', e.target.result);
                var view = that.getPath('parentView.previewImageView');
                view.set('src', e.target.result);
            }
            reader.readAsDataURL(input.files[0]);
        }
    }
});

html

<script type="text/x-handlebars">
                {{view App.FileField name="logo_image" contentBinding="content"}}
                {{view App.PreviewImageView width="200" height="100" }}
</script>
4

2 回答 2

0

假设您使用的是 ember-data,您可以创建一个模型来表示图像,然后从阅读器的 onload 回调中创建/保存。例如:

App.LogoImage = DS.Model.extend({
  id: DS.attr('number'),
  attachment: DS.attr('string')
});

//in App.FileField...
reader.onload = function (e) {
  this.$().parent(':eq(0)').children('img:eq(0)').attr('src', e.target.result);
  var view = that.getPath('parentView.previewImageView');
  view.set('src', e.target.result);
  var file = e.srcElement.result;
  var logo = App.LogoImage.createRecord({ attachment: file });
  logo.save();
}
于 2013-06-04T15:40:59.410 回答
0

我认为您可以混合一些传统的 MVC 方法来解决您的问题。从您当前的代码中,我可以假设显示图像的预览已完成,因此要在服务器端获取该文件,只需在您的 html 中使用以下代码

@using (Html.BeginForm("FileUpload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="file" {{view Wizard.FileField contentBinding="content"}} />
<input type="submit" id="btnUpload" value="Upload" />
}

并且在您的控制器方法中,您可以像这样访问文件

public ActionResult FileUpload(HttpPostedFileBase file)
{
         // Do what you want
}

要将图像保存在数据库中,您必须将其转换为字节(sql server 2008 现在支持图像,但像 postgresql 之类的数据库仍然需要图像作为字节)才能使用以下方法执行此操作

 MemoryStream target = new MemoryStream();
 file.InputStream.CopyTo(target);
 byte[] bytes= target.ToArray();
 return View();
于 2013-06-06T09:24:33.720 回答