作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要实现的是一个简单的文件上传,带有 redux-saga 和 react 的进度指示)。我在获取此指示时遇到问题,因为文件上传似乎被阻止了 - 它不应该被阻止。
在文件上传开始之前,会触发重新渲染并显示微调器并且窗口不会被阻塞。
我现在拥有的是一个带有表格的组件,每行显示一个文件。当用户上传文件时,乐观行会添加一个微调器作为内容。上传文件后,乐观行将被替换为带有文件名等的真实行。当我上传大约 50MB 的文件时,窗口被阻塞,并且在文件上传前不久(大约 0.5 秒前)微调器出现,然后文件已上传,微调器再次消失。
new Promise(res => setTimeout(res, 5000))
替换文件上传,一切正常 => 看起来 xhr/fetch 有问题。function* createDocument(partnerId, { payload, meta }) {
const siteId = getSiteIdFromRoute();
const {
mediaGroupId,
customArticleId,
logicalComponentId,
type,
name,
documentSrc,
meta: metaFromFrontEnd
} = payload;
const commonEventId = uuid();
const hans = {
optimistic: true
};
const payloadBasic = {
id: commonEventId,
version: 0,
aggregate: {
id: uuid(),
name: 'document'
},
context: {
name: 'contentManagement'
},
payload: {
name,
type,
links: {
partnerId,
siteId,
logicalComponentId,
customArticleId,
mediaGroupId
}
}
};
// creates the optimistic (fake) row with a spinner in the file list component - action marked as optimistic which will be reverted.
yield put(actions.denormalizeEvent({
...payloadBasic,
name: 'documentCreated',
optimistic: true,
payload: {
...payloadBasic.payload,
uploading: true
}
}));
yield fork(executeDocumentUpload, type, siteId, partnerId, documentSrc, payloadBasic);
}
function* executeDocumentUpload(type, siteId, partnerId, documentSrc, payloadBasic) {
const req = yield call(uploadDocument, type, siteId, partnerId, documentSrc);
const body = yield req.json();
const { meta: metaFromFileUpload, id } = body.response;
// removes the optimistic (fake) row from the file list component and and adds the real row with more file information (optimistic event gets reverted in middleware)
yield put(actions.sendCommandSuccess({
...payloadBasic,
name: 'createDocument',
payload: {
...payloadBasic.payload,
meta: metaFromFileUpload
}
}));
}
function uploadDocument(type, siteId, partnerId, documentSrc) {
let url;
if (type === 'site' || type === 'mediaGroup' || type === 'logicalComponent') {
url = `/file/site/${siteId}/document`;
} else if (type === 'customArticle') {
url = `/file/partner/${partnerId}/document`;
}
return postData(url, documentSrc);
}
最佳答案
问题是我确实将文件作为 base64 编码字符串发送,并使用错误的内容类型设置了请求。
'Content-Type': 'text/plain;charset=UTF-8'
将文件放入 FormData 对象并发送没有提到的内容类型的请求导致非阻塞请求。
关于javascript - 文件上传阻止更大的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42630139/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!