Springbootアップロードファイル法によるファイルパス取得の問題
2760 ワード
問題の説明:
springbootのプロジェクトを開発する際、プロジェクトの導入時に問題が発生しました.プロジェクトをjarパッケージにエクスポートし、java-jarで実行すると、プロジェクト内のファイルアップロードの機能が正常に動作せず、ファイルが格納されているディレクトリに取得された絶対パスの値が空で、ファイルがアップロードできません.
ソリューション:
また、上記のコードを使用するには、jarパッケージでパブリッシュする場合、私たちが格納するパスはjarパッケージと同じstaticディレクトリであるため、jarパッケージディレクトリのアプリケーションが必要であることに注意してください.propertiesプロファイルでは、次のように静的リソースパスを設定します.
jarパッケージでspringbootプロジェクトをパブリッシュする場合、デフォルトではjarパッケージとディレクトリの下のアプリケーションが使用されます.propertiesはプロジェクトプロファイルとして使用されます.
具体的な項目実戦:
springbootのプロジェクトを開発する際、プロジェクトの導入時に問題が発生しました.プロジェクトをjarパッケージにエクスポートし、java-jarで実行すると、プロジェクト内のファイルアップロードの機能が正常に動作せず、ファイルが格納されているディレクトリに取得された絶対パスの値が空で、ファイルがアップロードできません.
ソリューション:
//
File path = new File(ResourceUtils.getURL("classpath:").getPath());
if(!path.exists()) path = new File("");
System.out.println("path:"+path.getAbsolutePath());
// /static/images/upload/, :
File upload = new File(path.getAbsolutePath(),"static/images/upload/");
if(!upload.exists()) upload.mkdirs();
System.out.println("upload url:"+upload.getAbsolutePath());
// , :{ }/target/static/images/upload/
// jar , :{ jar }/static/images/upload/
また、上記のコードを使用するには、jarパッケージでパブリッシュする場合、私たちが格納するパスはjarパッケージと同じstaticディレクトリであるため、jarパッケージディレクトリのアプリケーションが必要であることに注意してください.propertiesプロファイルでは、次のように静的リソースパスを設定します.
# ,
resources.static-locations=classpath:static/,file:static/
jarパッケージでspringbootプロジェクトをパブリッシュする場合、デフォルトではjarパッケージとディレクトリの下のアプリケーションが使用されます.propertiesはプロジェクトプロファイルとして使用されます.
具体的な項目実戦:
/**
*
*/
@RequestMapping("/remoteupload")
@ResponseBody
public String douploadRemote(HttpServletRequest request, @RequestParam("file") MultipartFile multipartFile) {
if (multipartFile.isEmpty()) {
return "file is empty.";
}
String originalFilename = multipartFile.getOriginalFilename();
String newFileName = UUIDHelper.uuid().replace("-", "") + originalFilename.substring(originalFilename.lastIndexOf(".") - 1);
File file = null;
try {
File path = new File(ResourceUtils.getURL("classpath:").getPath());
File upload = new File(path.getAbsolutePath(), "static/tmpupload/");
if (!upload.exists()) upload.mkdirs();
String uploadPath = upload + "\\";
file = new File(uploadPath + newFileName);
multipartFile.transferTo(file);
//
FileSystemResource remoteFile = new FileSystemResource(file);
// package parameter.
MultiValueMap multiValueMap = new LinkedMultiValueMap<>();
multiValueMap.add("file", remoteFile);
String remoteaddr = "http://localhost:12345/test/doupload";
String res = restTemplate.postForObject(remoteaddr, multiValueMap, String.class);
return res;
} catch (Exception e) {
return "file upload error.";
} finally {
try{
file.delete();
} catch (Exception e) {
// nothing.
}
return "ok";
}
}