【发布时间】:2021-04-17 05:33:30
【问题描述】:
我在formData.append(key, value); 的value 部分收到的错误消息:
“未知”类型的参数不能分配给类型参数 '字符串 |斑点'。类型“{}”缺少以下属性 type 'Blob':大小、类型、arrayBuffer、切片等 2 个。
代码
const uploadSubtitle = async e => {
e.preventDefault();
const file = fileInput.current.files[0];
const res = await Axios.get(`/api/movies/${currentMovie.movieId}/subtitles?user=${user.id}`);
const { url, fields } = res.data;
const newUrl = `https://${url.split('/')[3]}.s3.amazonaws.com`;
const formData = new FormData();
const formArray = Object.entries({ ...fields, file });
formArray.forEach(([key, value]) => {
formData.append(key, value);
});
//... further code
};
<form onSubmit={uploadSubtitle}>
<input type='file' name='subtitle' ref={fileInput} accept='.srt' />
<button onClick={uploadSubtitle}>Upload</button>
</form>
更多细节
console.log(file)给了
File
{name: "Trainspotting-English.srt", lastModified: 1587840529000,
lastModifiedDate: Sun Apr 26 2020 00:18:49 GMT+0530 (India Standard Time),
webkitRelativePath: "", size: 103040, …}
lastModified: 1587840529000 lastModifiedDate: Sun Apr 26 2020 00:18:49 GMT+0530 (India Standard Time)
{} name: "Trainspotting-English.srt" size: 103040
type: "application/x-subrip" webkitRelativePath: "" __proto__: File
console.log(typeof file) 给
object
【问题讨论】:
-
您是否尝试过投射
file,或调用new Blob? -
@ZacAnger,我试过这个..
const blob = new Blob([fileInput.current.files[0]])然后这个const formArray = Object.entries({ ...fields, file: blob });,仍然给我同样的错误 -
我想补充的一点是我能够在开发过程中成功上传文件......它只是导致问题的打字稿错误
-
是的,错误来自 TypeScript,所以你只需要找出正确的方法来欺骗它。
// @ts-ignore评论会起作用,但最好弄清楚它想要什么。断言value是any也可以:formData.append(key, value as any)或const file = fileInput.current.files[0] as Blob也许。 -
前者有效,即不会抱怨类型错误,但后者不会...我仍然想知道
console.log(file)是否应该已经是Blob,因为__proto__是Filefile.
标签: javascript typescript multipartform-data form-data