2016-05-19 11 views
1

私は私のiOSコードから送信した画像をFlaskに届かせることができません。私は、問題がiOS側かフラスコ側から来ているかどうかは完全にはわかりませんが、画像がiOS側で正しくエンコードされていない可能性があります。SwiftのNSURLSessionを使用してフラスコサーバーに画像をアップロードする

スウィフトコード:

func uploadImage(image: UIImage) -> Void{ 
    //Convert the image to a data blob 
    guard let png = UIImagePNGRepresentation(image) else{ 
     print("error") 
     return 
    } 

    //Set up a network request 
    let request = NSMutableURLRequest() 
    request.HTTPMethod = "POST" 
    request.URL = NSURL(string: "http://127.0.0.1:5000/") 
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
    request.setValue("\(png.length)", forHTTPHeaderField: "Content-Length") 
    request.HTTPBody = png 
    // Figure out what the request is making and the encoding type... 

    //Execute the network request 
    let upload = NSURLSession.sharedSession().uploadTaskWithRequest(request, fromData: png) { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in 
     //What you want to do when the upload succeeds or fails 
    } 

    upload.resume() 

} 

フラスココード:

@app.route('/') 
def projects(): 
    if request.method == "POST": 
    file = request.files['file'] 
    if file: 
     img = Image.open(file) 
     img.show() 
return render_template("home.html") 

ありがとう!

答えて

0

フラスコに次のコード

file = request.files['file'] 

あなたはmultipart/form-data POSTリクエストからファイルを取得するために期待していることを意味します。

multipart/form-dataリクエストを行うことができるようにコードを書き直してください。ヘッダーにboundaryを指定することを忘れないでください。ここで

はサンプルコードです:

let boundary = "Boundary-\(NSUUID().UUIDString)" 

    let url = NSURL(string: "https://example.com/target.py")! 
    let request = NSMutableURLRequest(URL: url) 
    request.HTTPMethod = "POST" 
    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") 

    let path1 = NSBundle.mainBundle().pathForResource("image_x", ofType: "png") as String! 
    request.HTTPBody = createBodyWithParameters(param, filePathKey: "file", paths: [path1], boundary: boundary)