如何在没有multipart / form-data的情况下使用PrimeNG p-fileUpload?

时间:2018-12-04 09:44:59

标签: primeng

我正在使用p-fileUpload将.zip文件上传到AWS S3中,该上传工作正常,我可以通过OS应用程序正确下载并打开该文件,但是当我尝试使用InputStream Java读取同一文件时,效果不佳,例如

try (InputStream in = new URL(uri).openStream()) {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        IOUtils.copy(in, out);

        return ByteBuffer.wrap(out.toByteArray());
    } catch (IOException ex) {
        throw new SomeException(ex);
    }

检查文件,我看到以下数据:

------WebKitFormBoundaryhrGInEllRBnFuzls
Content-Disposition: form-data; name="MyAwesomeFunction970"; filename="hello-lambda.zip"
Content-Type: application/zip

PK
�0E��w�DA����D:5t�)��
�w�l����\1�)bvs۠�)�ĺ���>DYa#f��&��U�p�mC�GS�i��<n���$�p3ux����

------WebKitFormBoundaryhrGInEllRBnFuzls--

上面的数据包含一些标头信息,并且似乎是multipart / form-data上传的一部分。

例如,如果我通过Postman放置文件,则数据略有不同(没有标题),然后通过InputStream Java代码即可正常工作。

PK
�0E��w�DA����D:5t�)��
�w�l����\1�)bvs۠�)�ĺ���>DYa#f��&��U�p�mC�GS�i��<n���$�p3ux����

任何人都知道上传过程中发生了什么以及如何解决?

1 个答案:

答案 0 :(得分:1)

我通过调用自定义上传方法(例如:

)解决了此问题
<p-fileUpload
    name="{{uploadFileName}}"
    url="{{uploadUrl}}"
    customUpload="true"
    (uploadHandler)="customUpload($event.files, uploadUrl)">
</p-fileUpload>

customUpload(files:any, uploadUrl:string) {
    var reader = new FileReader();
    reader.onload = function (evt) {
        var xhr = new XMLHttpRequest();
        xhr.open('PUT', uploadUrl, true);
        xhr.setRequestHeader('Content-Type', files[0].type);
        xhr.send(evt.target.result);
    };
    reader.readAsArrayBuffer(files[0]);
}