Java 为什么在尝试上传大型视频时,应用引擎gcloud抛出错误413实体太大?

Java 为什么在尝试上传大型视频时,应用引擎gcloud抛出错误413实体太大?,java,gcloud,Java,Gcloud,我有一个带spring boot的API rest,我用它上传了一个视频,问题是,当我在本地环境中运行它时,它非常适合长视频,并实际将它们上传到我在gcloud中的存储中,但当我上传到生产中时,这种类型的视频会抛出错误413实体太大 知道为什么它在本地工作而不是在生产中吗 这是控制器: @RequestMapping(value = "/{videoId}/upload", method = RequestMethod.POST ) public ResponseEntity<Object

我有一个带spring boot的API rest,我用它上传了一个视频,问题是,当我在本地环境中运行它时,它非常适合长视频,并实际将它们上传到我在gcloud中的存储中,但当我上传到生产中时,这种类型的视频会抛出错误413实体太大

知道为什么它在本地工作而不是在生产中吗

这是控制器:

@RequestMapping(value = "/{videoId}/upload", method = RequestMethod.POST )
public ResponseEntity<Object> uploadTest(@PathVariable Long videoId, @RequestParam("file") MultipartFile file) {
    try {
        return ResponseEntity.ok(uploadVideo(videoId, file));
    } catch (Exception e) {
        return processException(e);
    }
}

public String uploadVideo(MultipartFile fileStream, final String folder, final String bucketName) throws IOException, ServletException {

InputStream resourceAsStream = getClass().getClassLoader().getResourceAsStream("project.json");

storage = getInstance(resourceAsStream);

        String blobName = fileStream.getName();
        BlobId blobId = BlobId.of(bucketName, blobName);
        byte[] content = fileStream.getBytes();

        DateTimeFormatter dtf = DateTimeFormat.forPattern("-YYYY-MM-dd-HHmmssSSS");
        DateTime dt = DateTime.now(DateTimeZone.UTC);
        String dtString = dt.toString(dtf);
        String extension = fileStream.getOriginalFilename().substring(fileStream.getOriginalFilename().lastIndexOf(".") + 1);
        final String fileName = fileStream.getName() + dtString + "." + extension;

        BlobInfo blobInfo = BlobInfo.newBuilder(bucketName, folder + "/" + fileName)
                                    .setAcl(new ArrayList<>(Arrays.asList(Acl.of(User.ofAllUsers(), Role.READER))))
                                    .build();
        try (WriteChannel writer = storage.writer(blobInfo)) {
            try {
                writer.write(ByteBuffer.wrap(content, 0, content.length));
                return "https://storage.googleapis.com/" + bucketName + "/" + folder  + "/" + fileName;
            } catch (Exception ex) {
                System.out.println(ex.toString());
                throw new BadRequestException("Error uploading");
            }
        }
}
@RequestMapping(value=“/{videoId}/upload”,method=RequestMethod.POST)
公共响应上载测试(@PathVariable Long videoId、@RequestParam(“文件”)多部分文件){
试一试{
返回ResponseEntity.ok(上传视频(视频ID,文件));
}捕获(例外e){
返回过程异常(e);
}
}
此函数从控制器调用:

@RequestMapping(value = "/{videoId}/upload", method = RequestMethod.POST )
public ResponseEntity<Object> uploadTest(@PathVariable Long videoId, @RequestParam("file") MultipartFile file) {
    try {
        return ResponseEntity.ok(uploadVideo(videoId, file));
    } catch (Exception e) {
        return processException(e);
    }
}

public String uploadVideo(MultipartFile fileStream, final String folder, final String bucketName) throws IOException, ServletException {

InputStream resourceAsStream = getClass().getClassLoader().getResourceAsStream("project.json");

storage = getInstance(resourceAsStream);

        String blobName = fileStream.getName();
        BlobId blobId = BlobId.of(bucketName, blobName);
        byte[] content = fileStream.getBytes();

        DateTimeFormatter dtf = DateTimeFormat.forPattern("-YYYY-MM-dd-HHmmssSSS");
        DateTime dt = DateTime.now(DateTimeZone.UTC);
        String dtString = dt.toString(dtf);
        String extension = fileStream.getOriginalFilename().substring(fileStream.getOriginalFilename().lastIndexOf(".") + 1);
        final String fileName = fileStream.getName() + dtString + "." + extension;

        BlobInfo blobInfo = BlobInfo.newBuilder(bucketName, folder + "/" + fileName)
                                    .setAcl(new ArrayList<>(Arrays.asList(Acl.of(User.ofAllUsers(), Role.READER))))
                                    .build();
        try (WriteChannel writer = storage.writer(blobInfo)) {
            try {
                writer.write(ByteBuffer.wrap(content, 0, content.length));
                return "https://storage.googleapis.com/" + bucketName + "/" + folder  + "/" + fileName;
            } catch (Exception ex) {
                System.out.println(ex.toString());
                throw new BadRequestException("Error uploading");
            }
        }
}
publicstringuploadvideo(multipartfilefilestream、finalstringfolder、finalstringbucketname)抛出IOException、ServletException{
InputStream resourceAsStream=getClass().getClassLoader().getResourceAsStream(“project.json”);
存储=getInstance(resourceAsStream);
字符串blobName=fileStream.getName();
BlobId BlobId=BlobId.of(bucketName,blobName);
byte[]content=fileStream.getBytes();
DateTimeFormatter dtf=DateTimeFormat.forPattern(“-YYYY-MM-dd-hhmmsss”);
DateTime dt=DateTime.now(DateTimeZone.UTC);
字符串dtString=dt.toString(dtf);
字符串扩展名=fileStream.getOriginalFilename().substring(fileStream.getOriginalFilename().lastIndexOf(“.”+1);
最终字符串文件名=fileStream.getName()+dtString+“+”扩展名;
BlobInfo BlobInfo=BlobInfo.newBuilder(bucketName,文件夹+“/”+文件名)
.setAcl(新的ArrayList(Arrays.asList(Acl.of(User.ofAllUsers(),Role.READER)))
.build();
try(writechannelwriter=storage.writer(blobInfo)){
试一试{
write.write(ByteBuffer.wrap(content,0,content.length));
返回“https://storage.googleapis.com/“+bucketName+”/“+文件夹+”/“+文件名;
}捕获(例外情况除外){
System.out.println(例如toString());
抛出新的BadRequestException(“上传错误”);
}
}
}
非常感谢您的帮助

应用程序引擎(标准?)将请求大小限制为32MB()

虽然这是可以理解的,但我认为假设dev服务器是生产服务的代理不是一个好的实践


我建议您将文件直接上传到云存储,并考虑使用,例如,对对象的元数据进行排队,最终触发应用程序引擎处理程序。

AppEngine(标准?)将请求大小限制为32 MB()。虽然这是可以理解的,但我认为假设dev服务器是生产服务的代理不是一个好的实践。我建议您将文件直接上传到云存储,并考虑使用通知()来输入对象的元数据,最终触发您的应用程序引擎处理程序。@ DazWilkin,我认为您的评论是对这个问题的正确答案,请将您的评论移到答案。