0
我正在嘗試上傳圖片與服務器。 在Android中,它的工作完美與此代碼:用Alamofire和MultiFormData上傳圖片
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
String strPath = "D:\\Personal\\Projects\\Resources\\Images\\ic_flash_on.png";
Path path = Paths.get(strPath);
byte[] bytes = Files.readAllBytes(path);
map.add("id", 2);
map.add("file", new ByteArrayResource(bytes) {
@Override
public String getFilename() {
return "ic_flash_on.png";
}
});
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
headers.add("Authorization", request.getHeader("Authorization"));
HttpEntity<MultiValueMap<String, Object>> imageEntity = new HttpEntity<MultiValueMap<String, Object>>(map, headers);
ResponseEntity<Photo> result = restTemplate.exchange("http://localhost:8080/api/photos/upload", HttpMethod.POST,
imageEntity, Photo.class);
return result;
在iOS中,我使用Alamofire與代碼:
let url = HOST + "api/photos/upload"
let accessToken = KeychainHelper.getStringForKey(KeychainConstaint.kAccessTokenKey) ?? ""
let headers = [
"Authorization": "Bearer \(accessToken)",
"Content-Type": "multipart/form-data"
]
Alamofire.upload(
.POST,
url,
headers: headers,
multipartFormData: { multipartFormData in
var id = 10000
let idData = NSData(bytes: &id, length: sizeof(Int))
//multipartFormData.appendBodyPart(data: photo.data, name: "file")
multipartFormData.appendBodyPart(data: idData, name: "id")
multipartFormData.appendBodyPart(data: photo.data, name: "file", fileName: ".jpg", mimeType: "image/jpeg")
},
encodingMemoryThreshold: Manager.MultipartFormDataEncodingMemoryThreshold) { encodingResult in
switch encodingResult {
case .Success(let upload, _, _):
upload.responseJSON { response in
debugPrint(response)
}
case .Failure(let encodingError):
print(encodingError)
}
}
而且它會失敗,原因是:「必需MultipartFile參數 '文件' 是不是禮物「
我錯過了什麼嗎? :(
我聽到你們的鬥爭,我有現在的樣子看起來像一個類似的問題。對我來說,它與參數「withName」和「文件名」中multipartFormData.append()調用來完成。 我會建議,如果你有控制Spring後端,添加一個帶有斷點的「Filter」類,你可以調查'好'和'壞'請求,看看到底有什麼不同(它會到達斷點 – MikaelW
嗨,我發現文件名:不應該格式化爲這樣的「.jpg」 我在該函數中衝突了'name'參數和'fileName'。 –