2013-09-04 82 views
6

Tôi đang phát triển một ứng dụng iOS và tôi đang sử dụng node.js để tạo kịch bản lệnh phía máy chủ. Tôi đang gặp sự cố khi tải hình ảnh lên máy chủ từ ứng dụng iOS. Nó hoạt động tốt nếu tôi tải lên hình ảnh từ biểu mẫu trang web. Nhưng nếu tải lên từ phía ứng dụng thì nó không hoạt động.Tải hình ảnh lên máy chủ qua node.js từ ứng dụng iOS

//test file 
h3 Pic Upload 
form(action='/pic_upload', method='post',enctype='multipart/form-data') 
    | user_pic: 
    input(type='file', name='user_pic') 
    input(type='submit') 

//app.js 
var userlogin =require('./routes/userlogin'); 
app.post('/pic_upload', userlogin.picUpload); 

//userlogin.js 
//picUpload function 
exports.picUpload = function(req, res) { 
console.log(req.files); // showing undefined, when called from IOS app 
// pic upload script... 
}); 

Tôi đã thử gửi hình ảnh từ phía ứng dụng dưới dạng tham số dữ liệu hoặc tệp nhưng không hoạt động. Làm cách nào để gửi thông số tệp từ phía ứng dụng để tôi có thể dễ dàng tải hình ảnh lên máy chủ? Vui lòng đề xuất một cách để giải quyết vấn đề.

+0

Bạn có thể hiển thị mã phía khách hàng của mình không? – Orifjon

Trả lời

8

Mã này hoạt động trong ứng dụng của tôi. Thử cái này.

NSData *imgData = UIImageJPEGRepresentation(newImg, 0.2); 

NSString *str = @"displayImage"; 

    NSString *urlString = @"http://some.url.com/post"; 

    // create request 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData]; 
    [request setHTTPShouldHandleCookies:NO]; 
    [request setTimeoutInterval:30]; 
    [request setURL:[NSURL URLWithString:urlString]]; 

    [request setHTTPMethod:@"POST"]; 

    NSString *boundary = [NSString stringWithFormat:@"---------------------------14737809831464368775746641449"]; 

    // set Content-Type in HTTP header 
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 
    [request setValue:contentType forHTTPHeaderField: @"Content-Type"]; 

    // post body 
    NSMutableData *body = [NSMutableData data]; 

    // add params (all params are strings) 
     [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"currentEventID\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[@"52344457901000006" dataUsingEncoding:NSUTF8StringEncoding]]; 


    // add image data 
    if (imgData) { 
     [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     // [body appendData:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"displayImage\"; filename=\"image.jpg\"\r\n"]]; 
     [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"image.jpg\"\r\n", str] dataUsingEncoding:NSUTF8StringEncoding]]; 

     [body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:imgData]; 
     [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    } 

    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

    // setting the body of the post to the reqeust 
    [request setHTTPBody:body]; 

    // set URL 
    [request setURL:[NSURL URLWithString:urlString]]; 

    NSString *bodyStr = [[NSString alloc]initWithData:body encoding:NSUTF8StringEncoding]; 
    NSLog(@" %@",bodyStr); 

    NSURLConnection *lot_Connection=[[NSURLConnection alloc]initWithRequest:request delegate:self]; 

    if(lot_Connection) 
    { 
     webdata = [[NSMutableData alloc] init]; 

    } 
+0

Làm thế nào để bạn có được hình ảnh này từ máy chủ nodejs của bạn? Từ "request.body" hoặc "request.file"? Bạn có thể đưa ra một ví dụ không –