我在上传文件到本地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或大的随机数