使用redux saga调用上传表单字段文件

时间:2017-11-06 15:41:24

标签: reactjs redux react-redux redux-saga saga

我正在form-data上传正文中的文件。使用ajax它工作正常,但当我尝试在redux-saga中执行相同操作时,它不起作用并失败。我做错了什么?

在ajax中,

let upload = ajax.post(PathHelper.apiPath + '/create/text').field('file', file);
    upload.end((err, response) => {
      if (err) {
        console.log('Error Encountered', err);
      }
      if (response) {
        const imageResponse = response.body;
        console.log('imageresponse: ', imageResponse);
      }
    });

这是我的传奇代码:

export function* fetchText(text) {
const formData = new FormData();
  formData.append('file', text.data);
  console.log('formData: ', formData);
  try {
    const options = {
      method: 'POST',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      },
      body: formData
    };
    const response = yield call(fetchJson, PathHelper.apiPath + '/create/text', options);
    console.log('response: ', response);

  } catch (err) {
    console.log('Error saving your image', err);
  }
 }

1 个答案:

答案 0 :(得分:0)

  

当我尝试在redux-saga中执行相同操作时,它不起作用并且失败

Redux-saga本身是关于执行异步操作,对某些redux事件触发,所以首先,可能省略put操作 - 通常saga拦截request - 就像操作和操作完成后创建success操作。在这种情况下,应该有redux - reducer,它将接受API调用结果并将其应用于UI组件上。

其次,上传文件需要包含enctype="multipart/form-data"的实时HTML表单,并且FormData对象应附加到原始表单。详情请见http://researchhubs.com/post/computing/javascript/upload-files-with-ajax.html