当前位置: 首页 > 知识库问答 >
问题:

如何上传文件到S3桶与Spring后端从React前端?

庄子平
2023-03-14

我正试图通过React将文件上载到s3存储桶,我正在与4xx和5xx进行斗争:(

下面是我的代码库:

onChangeHandler = event => {
    const data = new FormData();

    data.append('data', event.target.files[0], event.target.files[0].name);

    axios
        .post(
            '/api/attachments/temporary',
            {
                documents: data,
                tempDir: this.generateUuid()
            },
            {
                headers: {
                    'Content-Type': 'multipart/form-data'
                }
            }
        )
        .then(data => {
            console.log(`data --- `, data);
        })
        .catch(e => {
            console.log(` --- `, e);
        });
};

render() {
    return (
            <input type='file' name='file' onChange={this.onChangeHandler} />
    );
}

如果我发了这篇文章,我会得到500英镑,而这个错误是:

java.io.IOException:UT000036:解析多部分数据时连接终止

我还注意到documents属性为空:

这是后端的API文档:

谢谢!

共有1个答案

斜高翰
2023-03-14

如果您使用multiparthtpservletrequest

步骤1:添加依赖项

pom.xml

<dependency>
<groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>

第2步:发送与上面发送的文件相同的文件。

步骤3:在配置文件中配置bean(我使用了基于java的配置)

@Bean(name = "multipartResolver")
    public CommonsMultipartResolver createMultipartResolver() {
        CommonsMultipartResolver resolver=new CommonsMultipartResolver();
        resolver.setDefaultEncoding("utf-8");
        return resolver;
    }

步骤4:

@RequestMapping(value="/api/attachments/temporary")
public ServiceResponse uploadFile(MultipartHttpServletRequest request){

if (request.getFileNames().hasNext()) {
            //1. get the files from the request object
            Iterator<String> itr = request.getFileNames();
            MultipartFile multipartFileImage = request.getFile(itr.next());
            StringBuilder sb=new StringBuilder(multipartFileImage.getOriginalFilename());

            String filename=sb.substring(sb.lastIndexOf("."), sb.length()); // getting file extension
            filename="("+email+")"+filename; // concatenation unique value i.e email to its file name with extension
            user.setProfileImage(filename);

        try {
            File saveImage = new File(imagePath+filename);  //Local path for image file

            PropertiesCredentials cred = new PropertiesCredentials(getClass().getClassLoader().getResourceAsStream(awsCredentialsProperties));
            logger.debug("Aws access key id :"+cred.getAWSAccessKeyId());
            logger.debug("Aws Secret key :"+cred.getAWSSecretKey());
            AWSCredentials credentials = new BasicAWSCredentials(cred.getAWSAccessKeyId(),
                      cred.getAWSSecretKey()
                    );

            AmazonS3 s3client = AmazonS3ClientBuilder
                      .standard()
                      .withCredentials(new AWSStaticCredentialsProvider(credentials))
                      .withRegion(#) // Your region
                      .build();

            PutObjectResult putResult = s3client.putObject(
                      "<bucket name>", 
                      filename, 
                      saveImage
                    );
            multipartFileImage.transferTo(saveImage);
            logger.debug("putResult :"+putResult.getVersionId());
        }catch(Exception e) {
            return ServiceResponse.createFailureResponse("Unable to upload image due to internet connection failure. Try again later.");
        }

}
 类似资料:
  • 我一直在尝试将文件上传到s3存储桶。但该文件从未公开供查看。我必须手动将bucket中的文件/文件夹公开(每次上传时),以便查看。 有没有一种方法可以上传一个Android文件(位图),该文件的默认权限是在运行期间公开查看。如果可能的话,我更愿意通过编程来实现这一点。我查看了s3文档,没有找到任何有用的东西。

  • AWS Java SDK 2.15.73(当前最新版本)。Java 1.8.222操作系统IBM AIX 7.1 开发一个将文件上传到S3 bucket的应用程序。 在Maven pom文件中: Stacktrace的开始: 异常在sendFileToAWSNoAuth=无法马歇尔请求JSON: BasUri不得为空。software.amazon.awssdk.core.exception.Sd

  • 我在后端使用spring-boot 2.0.4,在前端使用vue 2.5.16 / axios 0.18.0,我希望将PDF文件上传到后端数据库,并从前端检索它们。 最初,我的灵感来自于spring部分的这个例子:https://grokonez . com/frontend/angular/angular-6/angular-6-client-upload-files-download-file

  • 我想使用S3托管通过Kotlin Spring Boot应用程序上载的文件。我按照说明使用了各种其他文档,并尝试了一些解决stackoverflow上类似问题的方法。我总是收到403错误。如何设置S3和IAM以便上载文件?我如何找出问题所在?任何帮助都将不胜感激。 我已经激活了访问日志记录,这需要很长时间,而且还没有对我有太大帮助,特别是因为生成日志需要45分钟。忽略状态为200的响应,日志中会出

  • 目前我正在做一个项目,我试图上传一个图像从反应前端到Spring启动后端。我能够成功上传我的图像,并将其存储在我的“目标/类/静态/公共/资产”文件夹中。我还将路径存储在我的数据库中,即“/public/资产/image_name.jpg”。构建“. jar”文件后,当我尝试访问图像时,它会给我这个错误消息。但是我能够访问我存储在“/资源/静态/”文件夹中的那些图像。 我知道这是一个配置问题。但我

  • 如果有人帮我解决这个问题,我会非常感激。 我正在为我的项目使用codeigniter框架。并想将我的图像上传到amazon s3桶中。当我尝试使用S3.php文件时 string(92)“不支持您提供的授权机制。请使用AWS4-HMAC-SHA256。” 有人能帮我解决这个问题吗。