使用Javascript设置content-disposition头部的大小参数。

3

问题

我一直在尝试设置内容分发头中的size参数。


注:此处翻译的是标题和段落中的文本,保留了HTML标签。
function uploadFile(file) {
    const data = new FormData();
    data.append('file', file);

    axios.post('url/of/endpoint', data);

FormData默认不发送大小参数,据我所知,也找不到一种设置方法。在Axios中有没有实现这个功能的方法?需要更底层的操作并构建自己的标头吗?

背景

我的主要目标是通过Java端点将文件输入流传送到S3。但是如果没有文件大小,所有数据都会加载到内存中,很可能会引起OOM异常。这个特定问题也已经在此处提出。是编写自己的字节缓冲区是唯一的方法吗?我应该停止懒惰并这样做吗?似乎是一个过于复杂的解决方案...

为什么文件大小通常不包括在FormData中?我尝试使用Content-Length,但它包括content-disposition头导致字节数不匹配。


你会如何处理 sizecontent-length - Kosh
@KoshVery 把它交给Amazon SDK,这样它就可以将文件分解成多部分了吗?再次提醒,这里已经询问了上下文 - Wompinalong
可以将数据存储在云数据库中而非云文件存储中吗? https://www.google.com/amp/s/amp.reddit.com/r/aws/comments/5s6g3n/binaryblob_storage_alternative_in_aws/#ampf=undefined - estinamir
Java还是JavaScript? - Barmar
@Barmar 的原始问题是关于 JavaScript 的,上下文涉及 Java。 - Wompinalong
1个回答

1

好的,经过走访办公室和朋友后,我得出结论,这是Java的缺陷。不是原问题本身,而是多部分上传需要总文件大小的事实。因此,我目前采用的实现方式让我感到非常不舒服,即在客户端添加一个FormData项size

function uploadFile(file) {
    const data = new FormData();
    data.append('size', file.size.toString());
    data.append('file', file);

    axios.post('url/of/endpoint', data);

然后更新后端以将该尺寸传递给S3 SDK……哎呀。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接