【发布时间】:2017-10-26 20:55:55
【问题描述】:
我用 SpringBoot 编写的 REST API 有以下方法用于上传照片。
@RequestMapping(method = RequestMethod.POST, value = "/save-photo")
public ResponseEntity<?> uploadPhoto(@RequestPart("file") MultipartFile file){
if (file.isEmpty()) {
System.out.println("Attached file is empty");
ErrorResponse errorResponse = new ErrorResponse();
errorResponse.setMessage("Attached file is empty");
return new ResponseEntity<ErrorResponse>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
String returnPath = null;
try {
byte[] bytes = file.getBytes();
String saveDate = new SimpleDateFormat("yyMMddHHmmssSSS").format(new Date());
Path path = Paths.get(UPLOAD_FOLDER + saveDate + "___" + file.getOriginalFilename());
Files.write(path, bytes);
returnPath = String.valueOf(path);
} catch (IOException e) {
//e.printStackTrace();
ErrorResponse errorResponse = new ErrorResponse();
errorResponse.setMessage(e.getMessage());
return new ResponseEntity<ErrorResponse> (errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
System.out.println("Before returning, return path = "+returnPath);
return new ResponseEntity<String>(returnPath, HttpStatus.OK);
}
以下是我编写的调用上述方法的代码。
savePhoto(photoToSave: File) {
let formData: FormData = new FormData();
formData.append("file", photoToSave);
let savedPath = this._http
.post(this._endpointUrl + "/save-photo", formData)
.map(
res => {
return res.json();
}
)
.catch(handleError);
return savedPath;
}
文件上传过程很好。但是 Angular2 给了我以下错误。
位置 0 处 JSON 中的意外标记 F
请注意,F 是服务器返回的路径的起始字母。
为什么会这样?我认为服务器响应不是 JSON。但为什么?通常 RestControllers 返回 JSON。我的服务器中的所有其他控制器方法都可以正常工作。 如何解决?
从浏览器控制台捕获的响应
标题:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://localhost:3000
Content-Length:88
Content-Type:application/json;charset=UTF-8
Date:Fri, 26 May 2017 04:33:05 GMT
Vary:Origin
回复:
F:\Work\Images\170526100305388___2.jpg
编辑
回复:
【问题讨论】:
-
使用开发人员工具的网络选项卡查看您收到的响应,并可能据此更改您的
res.json()。如果您只想从后端返回 json,则问题与角度无关 -
然后只返回响应。为什么要转成json?
-
谢谢。它解决了这个问题。但我不得不返回
res.url。我可以知道为什么吗?因为根据浏览器,响应只是字符串路径。 -
所以如果你只是做
return res;它会打印一个带有url键的对象? -
对不起。实际上 url 指的是端点的 url。这是我返回 res 时打印的内容。
Response with status: 200 OK for URL: http://127.0.0.1:8080/tender/save-new/save-photo
标签: json spring angular spring-boot