首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Rest -Rest文件

Spring Rest -Rest文件
EN

Stack Overflow用户
提问于 2015-01-31 08:16:18
回答 2查看 8.7K关注 0票数 4

我有以下代码,我使用它将文件发布到服务,它工作得很好。我遇到的唯一问题是,我必须编写一个临时文件来获取用于使用restTemplate发布对象的FileSystemResource

有没有什么办法我可以修改下面的代码,这样我就不用写临时文件了?

代码语言:javascript
复制
    public String postNewIcon2(Integer fileId, MultipartFile multiPartfile) {
    LOG.info("Entered postNewIcon");

    Map<String, Object> params = getParamsWithAppKey();
    params.put("fileId", fileId);

    String result = null;
    File tempFile = null;
    try {

        String originalFileNameAndExtension = multiPartfile.getOriginalFilename();

        String tempFileName = "c:\\temp\\image";
        String tempFileExtensionPlusDot = ".png";

        tempFile = File.createTempFile(tempFileName, tempFileExtensionPlusDot);
        multiPartfile.transferTo(tempFile);
        FileSystemResource fileSystemResource = new FileSystemResource(tempFile);

        // URL Parameters
        MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>();
        parts.add("file", fileSystemResource);

        // Post
        result = restTemplate.postForObject(getFullURLAppKey(URL_POST_NEW_ICON), parts, String.class, params);

    } catch (RestClientException restClientException) {
        System.out.println(restClientException);
    } catch (IOException ioException) {
        System.out.println(ioException);
    } finally {
        if (tempFile != null) {
            boolean deleteTempFileResult = tempFile.delete();
            LOG.info("deleteTempFileResult: {}", deleteTempFileResult);
        }
    }
    return result;
}

谢谢

EN

回答 2

Stack Overflow用户

发布于 2015-02-02 04:12:47

在Kresimir Nesek和此链接Sending Multipart File as POST parameters with RestTemplate requests的帮助下回答

下面的代码做到了这一点-现在不需要临时文件

代码语言:javascript
复制
    MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
final String filename="somefile.txt";
map.add("name", filename);
map.add("filename", filename);
ByteArrayResource contentsAsResource = new ByteArrayResource(content.getBytes("UTF-8")){
            @Override
            public String getFilename(){
                return filename;
            }
        };
map.add("file", contentsAsResource);
String result = restTemplate.postForObject(urlForFacade, map, String.class);
票数 11
EN

Stack Overflow用户

发布于 2018-04-05 20:22:53

MultipartFile需要一些临时位置。请尝试此代码,以获取物理文件:

代码语言:javascript
复制
private File getTempFile(MultipartFile attachment){
    CommonsMultipartFile commonsMultipartFile = (CommonsMultipartFile) attachment;
    DiskFileItem diskFileItem = (DiskFileItem) commonsMultipartFile.getFileItem();
    return diskFileItem.getStoreLocation();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28246736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档