我正在为我的应用程序创建API。在基于GUI浏览器的应用程序中,文件通过表单提交上载。所以我只做CommonsMultipartFile file = request.getFile(myfile)
。但是,API将以字符串形式提供文件的绝对路径,而不是上载文件。我的应用程序将可以访问此绝对路径。
因此我不必更改应用程序的基础方法(接受公共接口MultiPartFile
。出于API目的,我想从此绝对路径读取文件并创建{{1可以传递给我已经用于基于GUI浏览器的应用程序的方法的对象。
我该怎么做? CommonsMultipartFile
的构造函数接受CommonsMultipartFile
答案 0 :(得分:2)
这是特定于API的代码。即不是通常的文件上传代码。
通常的步骤是:
这个答案取代了2& 3,逻辑独立于servlet - 它避免使用ServletFileUpload(特定于servlet)及其祖先FileUpload(以便用绝对路径名控制文件位置)。注意:(3)通常检查HTTP请求参数以确定传递给FileItemFactory.createItem的较低级别参数 - 这些参数是手动提供的,然后仅用作信息元数据。替换为2& 3:
下面提供的请求代码。最后,它调用公共代码 - 与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...
参数:
(因为避免了ServletFileUpload& FileUpload,以下只是元数据字段,不用于控制处理)
答案 1 :(得分:0)
上面的 https://stackoverflow.com/a/16682983/688810 有例外:
无法调用“org.apache.commons.io.output.DeferredFileOutputStream.isInMemory()”,因为“this.dfos”为空
解决方案:java.lang.NullPointerException while creating DiskFileItem