将图像存储在目录中 - Spring MVC

时间:2016-12-30 16:06:19

标签: java android spring spring-mvc web

我是初学者使用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,以便将其保存在数据库中并且能够将来下载它,我该怎么做?

1 个答案:

答案 0 :(得分:0)

你可以编写一个控制器,它基于一些请求参数和一个固定的url转到包含图像并返回将特定图像作为输出流写入响应对象......参数对于不同的参数会有所不同图像......以及固定网址和请求参数的组合将是您将存储在数据库中的网址。