html
에 바인딩 된 객체가 포함 된 양식이 ng-bind
입니다. 동일한 양식에는 fileupload
위젯이 포함됩니다 : <input type="file" id="uploadedFile" name="uploadedFile">
.Angular에서 Restlet으로 파일 및 JSON 보내기
나는 이것을 Java Restlet
에 제출할 예정입니다. restlet
에서 File
을 얻을 수 있지만 내 개체를 나타내야하는 json
은 null입니다. 이 문제를 해결할 방법이 있습니까?
여기 내 코드가 있습니다. Restlet
측면에서
function saveMap2(map, fileToUpload) {
var formData = new FormData();
formData.append("map", map);
formData.append("file", fileToUpload);
var deferred = $q.defer();
$http.post(REST_SAVE_MAP_URI, formData, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
})
.then(
function (response) {
deferred.resolve(response.data);
},
function(errResponse) {
console.error('Error while saveMap');
deferred.reject(errResponse);
});
return deferred.promise;
}
: 각 측면에서
@Post
public Representation doPost(Representation entity) {
try {
System.out.println("Media type? " + entity.getMediaType());
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1000240);
RestletFileUpload upload = new RestletFileUpload(factory);
FileItemIterator fileIterator = upload.getItemIterator(entity);
while (fileIterator.hasNext()) {
FileItemStream fi = fileIterator.next();
String fieldName = fi.getFieldName();
String contentType = fi.getContentType();
System.out.println("FIELD = " + fieldName + ": " + fi);
if (!fi.isFormField()) {
String fileName = fi.getName();
System.out.println("name? " + fileName);
InputStream is = new BufferedInputStream(fi.openStream());
BufferedOutputStream output = null;
try {
output = new BufferedOutputStream(new FileOutputStream("/path/" + fileName, false));
int data = -1;
while ((data = is.read()) != -1) {
output.write(data);
}
} finally {
is.close();
output.close();
}
}
}
}
결과는 그 내가 업로드가 제대로 저장되지만 내가 얻는 방법을 모르는 해요 이미지 map
json
. 나는 그것이 요청처럼 보인다 entity
을 인쇄있을 때
Media type? multipart/form-data; boundary=----WebKitFormBoundary9GSUTgCJ4NbnnoT8
FIELD = map: org.apache.commons.fi[email protected]54d1ffff
FIELD = file: org.apache.commons.fi[email protected]5a160b15
name? IMG_5327.JPG
괜찮 :
'------WebKitFormBoundarysmqftmsA0EFDlceo
Content-Disposition: form-data; name="map"
[object Object]
------WebKitFormBoundarysmqftmsA0EFDlceo
Content-Disposition: form-data; name="file"; filename="IMG_5327.JPG"
Content-Type: image/jpeg
어떤 생각 방법이 문제를 해결하려면 여기를
은 일부 출력입니까? 같은 요청에서 json과 파일을 모두 얻으려면 어떻게해야합니까?
Dunno,하지만 멀티 파트 요청의 첫 번째 부분에있는 "[object Object]"가 맞습니까? JSON 함수에 대한 대화가 아니라 JS 측에서 .toString이 호출 된 것처럼 보입니다. – Brian
stringify를 사용하려고했지만 아무 것도 변경하지 않았습니다. 나는 '지도'객체를 얻은 다음 파일을 가져 오는 코드에 전달하기 위해 restlet 측에 코드 조각이 누락되었다고 확신합니다. – Eddy
지도 양식 데이터의 Content-Type도 표시되지 않습니다. 그것이 없으면 프레임 워크는 내용을 올바르게 추론 할 수 없습니다. – Brian