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