javascript - 在 Ember.js 中将图像上传到服务器(或 S3)的正确方法是什么?

标签 javascript ember.js

我有基于 Ember.js (2.13) 构建的应用程序。我有 User 模型,目前我正在研究头像上传功能。当我修改模型并保存它时,Ember 在其期间向我的 API 发出 PATCH 请求 Ember 序列化器构建了漂亮的 json-api 对象,我喜欢它。

当我需要将图像上传到服务器时,我需要使用文件数据向我的 API 发出一些 PUT 请求,我可以使用 jQuery ajax 来实现此目的。服务器将调整大小并裁剪图像并将其保存在磁盘上或将其推送到 S3 存储桶。但我不喜欢这种方式,因为这个请求将绕过 Ember 的序列化器创建,并且不引用模型。因此,我需要将上传的文件名设置为 User 模型并保存,然后我将对服务器产生冗余请求。

我有一个想法,在 Ember.js 应用程序中将文件转换为 base64 字符串,并将该字符串设置为 User 模型并保存。在这种情况下,我将向服务器发出一个请求。这是上传文件的好方法吗?

请建议在 Ember.js 应用程序中上传文件的最佳实践。

最佳答案

But I do not like this way because this request will be created bypassing Ember's serializer and without references to model.

对此您无能为力 - ember 数据不支持文件。在许多情况下 ED 还不够好(例如 - 嵌套资源 URI、部分更新)。我建议不要太担心它 - 如果您无法使用 ember 数据执行某些请求,只需使用 Ember.$.ajax 即可。

So I need to set uploaded filename to User model and save it then I'll have redundant request to server.

不,你不知道。只需配置您的后端以返回完整的用户模型(就像您对使用 ED 的其他获取/发布/更新请求所做的那样),并将结果(当然,如果请求成功)传递给 pushPayload store 的方法。商店将使用实际数据进行更新,无需额外请求。示例:

this.get('session').authorize('authorizer:token', (headerName, headerValue) => {
  const headers = {};
  headers[headerName] = headerValue;
  /*Instead of data object, you will create a formData*/
  const data = {
    /*Some data*/
  };
  Ember.$.ajax(
    {
      url: '/path-to-resource/id-of-resource',
      headers,
      type: "PUT",
      data
    }
  )
    .then(
      (payload) => {
        this.store.pushPayload(payload);
      },
      (response) => {
        this.set('errorMessage', stringifyError(response));
      }
    )
    .always(() => {
      this.set('isLoading', false);
    });
});

UPD:有一个插件,ember-cli-form-data它声称添加了对 ember 数据文件上传的支持。我自己没有尝试过,所以不能说它是否有效以及有多好。

关于javascript - 在 Ember.js 中将图像上传到服务器(或 S3)的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42372731/

相关文章:

javascript - Ember.js - 渲染模型的附加数据

javascript - redux-form,如果使用返回函数,验证会中断

ember.js - Ember状态在state的Enter方法中没有完全改变,仍然是之前的状态

javascript - EmberJS 中的 []、@each、content 和 <arrayName> 之间有什么区别?

javascript - 在每个数组元素后追加 '|'

javascript - Ember.js 每周日历导航

ember.js - 使用动态变量访问哈希 - 获取 Parse error Expecting 'ID' ,得到 'INVALID'

javascript - 使用 javascript 提交具有新值的表单。 (MVC)

javascript - Kendo ui 中的嵌套 JSON 未加载

javascript 日期不同天等于毫秒