2

在一个无状态的移动应用程序中,我需要将一个图像文件从一个移动客户端上传到我的服务器,该服务器公开一个基于 Spring MVC 的 Web 层(稍后我将需要对该图像执行 OCR 过程,但这一点不相关) .

我见过的所有 spring MVC 文件上传示例都是基于MultipartFiles的,它不适合我的需求,因为它们假设 modelAndView 存在,但是我的服务器是无状态的,我不使用模型或视图,也不使用 http 会话,只有纯和简单的 JSON 格式的宁静请求。

我想知道最好的方法是什么?

现在,我创建了一个测试,将我的图像作为字符串发送到我的服务器(使用 base64 编码)。就像是:

ClassPathResource myFile= new ClassPathResource("imageName.jpg");
byte[] fileByteArray = Files.readAllBytes(myFile.getFile().toPath());
String imageAsString = Base64.encodeBase64URLSafeString(fileByteArray);

现在我将这个 imageAsString 发送给我的控制器。然后在我的控制器中,我可以使用以下内容将此字符串解码回字节数组:

public static byte[] decodeFile(String fileDataString) {
return Base64.decodeBase64(fileDataString);
}

所以在我的服务器中,我现在持有一个字节数组,它是原始数据,除了将它写入 FileOutputStream 之外,我不确定我可以用它做任何事情。有人可以推荐将图像上传到我的服务器的良好做法吗?

4

2 回答 2

1

您可以使用 MultipartFile 执行此操作,而无需使用如下所示的模型和视图。

@RequestMapping(value="/rest/files", method=RequestMethod.POST,consumes="multipart/form-data", produces="application/json")
@ResponseBody()
public String uploadFile(@RequestParam("file") MultipartFile file) {
    try {
        if (!file.isEmpty()) {
            byte[] bytes = file.getBytes();
            // store the bytes somewhere
            return  "{\"success\": true}";
        } else {
            return  "{\"success\": false}";
        }
    } catch (Exception ex) {
        return  "{\"success\": false}";
    }
    return  "{\"success\": false}";
}
于 2012-12-27T18:34:28.900 回答
0

Since uploading MultipartFile to a spring MVC web layer requires multiple changes (servlet-context changes, message converters changes, Controller adjustments etc..) and I could not find any complete and sinple tutorial for this process I decided to simply upload my files (images) as a Base64 encoded string. To do this I used org.apache.commons.codec.binary.Base64 which provides the encodeBase64URLSafeString mathod that can encode my file into string and then using decodeBase64 decode it back to the original file content. This way I'm not loosing any data on the way and I'm avoiding any complex changes. The disadvantage of this method is that it requires my clients to encode the files in the exact same way the encodeBase64URLSafeString方法可以,所以我很确定它不是最佳的..

于 2013-01-02T12:53:45.827 回答