如何从绝对文件路径制作CommonsMultipartFile?
我正在为我的应用程序创建一个API。 在基于GUI浏览器的应用程序中,文件通过表单提交上载。 所以我只做CommonsMultipartFile file = request.getFile(myfile)
。 但是,API将以字符串forms提供文件的绝对路径,而不是上载文件。 我的应用程序将可以访问此绝对路径。
所以我不必更改我的应用程序的底层方法(它接受通用接口MultiPartFile
出于API目的,我想从这个绝对路径读取文件并创建一个CommonsMultipartFile
对象,它可以传递给方法我已经用于基于GUI浏览器的应用程序了。
我怎样才能做到这一点? CommonsMultipartFile
构造CommonsMultipartFile
接受FileItem
这是API特定的代码。 即不是通常的文件上传代码。
通常的步骤是:
- 构造FileItemFactory
- 构造ServletFileUpload,将其传递给工厂
- 调用ServletFileUpload.parseRequest(请求)
这个答案用独立于servlet的逻辑替换2和3 – 它避免使用ServletFileUpload(特定于servlet)及其祖先FileUpload(以便用绝对路径名控制文件位置)。 注意:(3)通常检查HTTP请求参数以确定传递给FileItemFactory.createItem的较低级别参数 – 这些参数是手动提供的,然后仅用作信息元数据。 更换2和3:
- 构造FileItem(通过FileItemFactory.createItem – 需要手动提供较低级别的参数,通常通过ServletFileUpload.upload()确定)
- 使用绝对路径写入特定文件
- 通过MultipartFile上传文件
请求的代码如下。 最后,它调用公共代码 – 与Servlet上传共享。
// Initialise Apache Commons FileItemFactory for API use only FileItemFactory fif = new DiskFileItemFactory(sizeThreshold, repositoryBaseDirFile); // Create Apache Commons FileItem & write file at fullFilePathString into it FileItem fi = fif.createItem(fieldName, contentType, isFormField, fileName); fi.write(new java.io.File(new java.net.URI(fullFilePathString)); // Convert FileItem to Spring wrapper: CommonsMultipartFile org.springframework.web.multipart.MultipartFile mf = new CommonsMultipartFile(fi); // From here, reuse the same code as the servlet upload. Operate only upon // Spring MultipartFile, but not ServletFileUpload, FileItemFactory etc...
参数:
- fullFilePathString :将上载文件的绝对路径(作为String)
- fieldName :表单上的字段名称
(因为避免使用ServletFileUpload和FileUpload,以下内容仅成为元数据字段,不用于控制处理)
- sizeThreshhold :内存大小阈值(以字节为单位)( 通常较小的文件仅使用内存上传,较大的文件通过磁盘上传 – 但此逻辑的文件始终通过磁盘上传)。 默认值= DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD。
- repositoryBaseDireFile : 通常是文件上传’temp’目录(作为File类型),但是这个逻辑使用绝对路径上传文件
- contentType :表单上字段的内容类型(MIME类型)(如果不是多部分表单字段,则为null)
- isFormField :如果是普通表单字段,则为“true”,否则为false,如果是多部分字段。
- fileName :文件的名称 – 通常通过表单/客户端指定。
- 添加到WEB-INF / lib的jar文件在我尝试导入时无法识别:说包不存在
- 属性文件未使用Apache Commons Configuration反映修改的更改
- Apache commons fileupload“Streaming API”
- 我何时应该使用Apache Commons的Validate.isTrue,何时应该使用’assert’关键字?
- 将POJO内容从一个bean复制到另一个bean
- org.apache.commons.net.ftp.FTPClient listFiles()的问题
- 来自apache-commons exec的进程输出
- 使用Linux上的Apache Commons Compression压缩文件时编码错误
- 将Java Bean展平为地图