現在、Objective CでUIImageとNSStringを取り込み、サーバーにPOST要求を行うメソッドを記述しようとしています。残念ながら、私は何かを送るのが難しいです。 HTMLフォームでフォームを試したところ、写真とパラメータを正常にアップロードできました。しかし、私は私のiOSアプリでそれを複製することができません。 POSTリクエストを作成しようとすると404エラーが発生します。AFnetworking 3.0でマルチパート形式のデータを送信できません
Githubページに従ったマルチフォームデータPOSTリクエストを送信する2つの方法を試しましたが、成功しませんでした。 XcodeでUIImageをデバッグしましたが、実際には存在することがわかりました。私はそれが私が送信しているパラメータと関係があると思っています。パラメータはformDataAppendの一部であるか、または私が以下で行った辞書のようなものでしょうか?
コメント部分はGithubのチュートリアルに対応しています。コメントアウトされていないセクションには、Stackoverflowをブラウズしてもまだ役に立たない部分が含まれています。以下でここ
+(void) uploadPhotoWithID:(NSString *)ownerID andPhotoImage:(UIImage *)image andCompletionHandler:(void (^)(MZPhoto *, NSError *))callback{
NSData *imageData = UIImageJPEGRepresentation(image, 1);
NSDictionary *parameters = @{@"owner_id": ownerID};
// NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:upload_photo_url parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
// [formData appendPartWithFileData:imageData name:@"photo" fileName:@"temp.jpg" mimeType:@"image/jpeg"];
// } error:nil];
// AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
//
// NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
// if(error){
// NSLog(@"File Upload Failed");
//
// }
// else{
// NSLog(@" %@", responseObject);
// MZPhoto *photo = [[MZPhoto alloc] initWithDictionary:responseObject error:nil];
// callback(photo, nil);
// }
// }];
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:upload_photo_url]];
[manager POST:upload_photo_url parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
[formData appendPartWithFileData:imageData name:@"photo" fileName:@"photo.jpg" mimeType:@"image/jpeg"];
} progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@" %@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@" Failed");
}];
}
私のNode.jsの機能があり、
exports.upload_photo = function(req, res, next) {
var owner_id = req.body.owner_id;
console.log(owner_id);
pg.connect(connectionString, function(err, client, done) {
if (err) {
done();
console.log(err);
return res.status(500).json({success: false, data: err});
}
var query = client.query("INSERT INTO photos (likes, dislikes, user_id) " +
"VALUES (0, 0, $1) RETURNING photo_id, likes, dislikes, user_id", [owner_id]);
var result;
console.log(req.file);
query.on('row', function(row) {
row.file_url = baseFileURL + row.photo_id + '.jpg';
result = row;
});
query.on('end', function() {
done();
fs.rename('./static/photos/' + req.file.filename, './static/photos/' + result.photo_id + '.jpg', function(err) {
if(err) console.log("Error Renaming the file!");
return res.json(result);
});
});
});
console.log("Received photo upload from: " + owner_id);
}
くださいますPUTのためにも、この作品? –