我是初学者使用Spring MVC,我正在开发一个社交网络Android应用程序。用户应该能够在新闻Feed中上传帖子。
每个帖子最多可以附加一个图像,所以我需要在服务器上存储图像文件。
我已经使用RestTemplate实现了上传过程的示例:
FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
formHttpMessageConverter.setCharset(Charset.forName("UTF8"));
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add( formHttpMessageConverter );
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
map.add("file", new FileSystemResource(path)); /* path - is the path of the
image i want to upload */
map.add("username","user1");
HttpHeaders imageHeaders = new HttpHeaders();
imageHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, Object>> imageEntity = new HttpEntity<>(map, imageHeaders);
restTemplate.exchange(messageURL, HttpMethod.POST, imageEntity, Boolean.class);
在Spring MVC方面:
@RequestMapping(value = "/uploadPhoto/{id}", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<String> uploadPhoto(@RequestParam("file") MultipartFile srcFile,
@PathVariable("id") Integer id,
@RequestParam("username") String username)
{
System.out.println("Photo name = "+srcFile.getName());
System.out.println("Photo size = "+srcFile.getSize());
System.out.println("Photo original name = "+srcFile.getOriginalFilename());
System.out.println("Username = "+username);
String uploadsDir = "/uploads/";
String realPathtoUploads = context.getRealPath(uploadsDir);
if(! new File(realPathtoUploads).exists())
{
new File(realPathtoUploads).mkdir();
}
String orgName = srcFile.getOriginalFilename();
String filePath = realPathtoUploads + orgName;
File dest = new File(filePath);
try
{
srcFile.transferTo(dest);
}
catch (IllegalStateException | IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
此代码有效,使用它我可以将手机存储中的照片上传到服务器,但问题是我想获取上传照片的URL,以便将其保存在数据库中并且能够将来下载它,我该怎么做?
答案 0 :(得分:0)
你可以编写一个控制器,它基于一些请求参数和一个固定的url转到包含图像并返回将特定图像作为输出流写入响应对象......参数对于不同的参数会有所不同图像......以及固定网址和请求参数的组合将是您将存储在数据库中的网址。