使用Javascript在content-disposition标头中设置size参数

时间:2018-12-06 20:32:58

标签: javascript http axios

问题

一段时间以来,我一直在尝试在content-disposition标头中设置size参数。

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

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

FormData默认情况下不发送size参数,据我所知,我看不到自己设置它的方法。有没有办法使用Axios做到这一点?我是否需要更底层并构建自己的标头?

上下文

我的主要目标是通过Java端点将文件输入流通过管道传递到S3。但是,如果没有文件大小,则所有数据都将加载到内存中,并且很有可能导致OOM异常。这个特定的问题has been asked here as well。编写自己的字节缓冲区是唯一的方法吗?我应该不再懒惰吗?似乎是一个过于复杂的解决方案...

在FormData中通常不包含文件大小的原因是否存在?我尝试使用Content-Length,但是其中包含content-disposition标头,并导致字节数不匹配。

1 个答案:

答案 0 :(得分: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。。。