小编And*_*j H的帖子

如何获取部分多部分Servlet 3.0请求写出的文件路径?

我正在编写Spring MVC控制器,它将接受多部分文件上传(从HTML表单上传文件的标准方法).

Servlet 3.0规范引入了servlet容器处理multipart/form-data的标准方法,引入了MultipartConfigElement用于配置和Part接口,Spring MVC与它们集成,没有任何问题.

问题:我希望获得通过Part.write()方法输出的文件的完整路径,跳过不必要的InputStream读取.由于文件大小的原因,上传到我的控制器的文件最有可能最终由servlet容器输出到磁盘的临时文件,因此Part.write()会将文件移动到目标名称而不是滥用RAM资源.根据规范,该文件是相对于配置的多部分位置编写的.

我想出的解决方案是这样的:

@RestController
@RequestMapping("/upload")
public class UploadController {
    @Autowired
    private MultipartConfigElement multipartConfigElement;

    @RequestMapping(value = "/{uploadId}", method = RequestMethod.POST)
    public String handleMultipartFileUpload(
            @PathVariable String uploadId,
            @RequestParam("file") List<Part> files) throws IOException {
        for (Part uploadedPart : files) {
            String temporaryFileName = UUID.randomUUID().toString();

            uploadedPart.write(temporaryFileName);

            // CODE-SMELL FOLLOWS:
            Path temporaryFilePath = FileSystems.getDefault().getPath(
                    multipartConfigElement.getLocation()).resolve(temporaryFileName);
        }

        return "handleMultipartFileUpload";
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码气味评论就是这样:代码味道.我使用autowired创建了写入文件的路径MultipartConfigElement,Spring恰好将其作为bean.问题是:

  1. 有没有更好的方法来获取文件的写入位置?
  2. 那些不使用Spring而且无法访问注入MultipartConfigElementbean的应用程序怎么样?

java multipartform-data spring-mvc servlet-3.0

5
推荐指数
0
解决办法
1284
查看次数

如何将多个库存档(.a)打包到一个存档文件中?

如何在Linux上将多个归档文件转换为一个大型归档文件(使用binutils ar和/或GCC).

我尝试过这样的事情ar rcs libbig.a libsmall1.a libsmall2.a,但它不起作用(结果libbig.a是空的).

linux

4
推荐指数
1
解决办法
2176
查看次数