上传到本地WebDav-spring-boot



我在上传文件到本地WebDav时遇到问题。到目前为止,我有:

public interface IStorageService {
URI SaveFile(String filename, InputStream inputStream);
}
@Component
public class LocalStorageService implements IStorageService {
@Value( "C:temp" )
private String filestorePath;

public URI SaveFile(String filename, InputStream inputStream) {
var rootLocation = Paths.get(filestorePath);
var filePath = rootLocation.resolve(filename);
try {
Files.copy(inputStream, filePath);
} catch (IOException e) {
throw new RuntimeException("Failure save file to " + filename + " in " + filestorePath + "." + e.getMessage(), e);
}
return filePath.toUri();
}
}

和控制器

private final DocumentService documentService;
public DocumentController(DocumentService documentService) {
this.documentService = documentService;
}
@RequestMapping(method = RequestMethod.POST)
public DocumentModel handleFileUpload(@RequestParam("file") MultipartFile file) throws IOException {        
return documentService.handleFileUpload(file.getOriginalFilename(), file.getInputStream());
}

它工作正常,文件被上传到C:\/temp。。。现在我想做同样的事情,但上传文件到本地WebDav。当我改变@Value"时;C: \temp到";http://localhost"(这是马的webdav位置(我有:

invalidpathexception: illegal char <:> at index 4: http://localhost

或者当我声明http://localhost时不带<:>

nosuchfileexception: httplocalhost

如何编写代码将文件直接上传到WebDav。SaveFile方法的参数不能更改,我需要使用Name作为String和InputStream。我试过用沙丁,但没有用。有人能帮我吗,给我一些提示或代码建议吗?

问候!

您可以获得部署web应用程序/war/servlet/控制器的路径:

Servlet上下文上下文=getContext((;字符串fullPath=context.getRealPath("/WEB-INF/test/foo.txt"(;

对于Spring项目,在控制器中

'@Autowired
'ServletContext context; 

和在控制器方法:

'String uploadPath = context.getRealPath("") + File.separator + UPLOAD_DIRECTORY;

以及真实的文件名,但如果一个用户上传两次相同的文件,或者两个用户上传相同名称的文件,该怎么办?

最好放在带有用户id/用户名的子目录中,可能还有日期时间或其他标识符,如TXN id+一些固定文本,如

' String fileName = context.getRealPath("") + File.separator + userId + readlName + "xyz."
  • extnFromMimeType

并根据您的业务用例将此事务/用户的路径存储在数据库中。

如果mime类型是image/PMG,那么extnFromMimeType将是";png";;如果jpeg或jpg;jpg";

参见

  • war/WEB-INF文件夹中资源的文件路径?

  • 如何在springmvc控制器中获取getServlet上下文((

  • 在Spring MVC中,当使用@ResponseBody 时,我如何设置mime类型的头

  • https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types

如果每个用户/事务可以有很多图像,也可以使用createTemp文件来获得唯一的文件名使用UUID也是可能的。。。https://stackoverflow.com/a/1293712/1643558或大的随机数

相关内容

  • 没有找到相关文章

最新更新