1
我想上傳(ios swift應用程序)一堆URL參數和圖像在服務器(節點快車)上創建一個帳戶。一切似乎都運行良好,除了圖像,一旦保存在服務器上顯示爲文件類型「數據」,因此將不會顯示在瀏覽器中。值得注意的是,我正在嘗試使用iPhone攝像頭拍攝的圖像作爲註冊表單的一部分。數據正確發佈,文件保存正確(呃,名字確實並且在正確的位置)並且正確接收到響應。快速圖像上傳保存爲mime_type「數據」
有沒有關於httpbody的信息?這從瀏覽器和我的android應用程序的預期工作,所以我懷疑這是在swift httpbody,或節點multer和bodyparser中的東西。 任何幫助,或正確的方向推將是有益的,謝謝! 的IOS方法
var request = NSMutableURLRequest(URL: NSURL(string: (self.url + path) as String)!)
request.HTTPMethod = "POST"
var boundary = generateBoundaryString()
request.setValue(NSString(format: "multipart/form-data; boundary=%@", boundary) as String, forHTTPHeaderField: "Content-Type")
var body = NSMutableData()
if data.count > 0 {
for(key, value) in data {
body.appendData(NSString(format: "\r\n--%@\r\n", boundary).dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData(NSString(format: "Content-Disposition: form-data; name=\"%@\"\r\n\r\n", (key as? String)!).dataUsingEncoding(NSUTF8StringEncoding)!)
if let string = value as? String {
body.appendData(NSString(format: "%@\r\n", string).dataUsingEncoding(NSUTF8StringEncoding)!)
} else if let num = value as? Int {
body.appendData(NSString(format: "%u\r\n", num).dataUsingEncoding(NSUTF8StringEncoding)!)
}
}
}
if image != nil {
var imageData:NSData = NSData(data: UIImageJPEGRepresentation(image!, 1))
var filename = "profile_\(Int64(NSDate().timeIntervalSince1970*1000)).jpg"
var mime_type = "image/jpeg"
body.appendData(NSString(format: "\r\n--%@\r\n", boundary).dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData(NSString(format: "Content-Disposition: form-data; name=\"profile_image\"; filename=\"%@\"\r\n\r\n", filename).dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData(NSString(format: "Content-Type: %@\r\n\r\n", mime_type).dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData(imageData)
body.appendData(NSString(format: "\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)
}
body.appendData(NSString(format: "--%@--\r\n", boundary).dataUsingEncoding(NSUTF8StringEncoding)!)
request.HTTPBody = body
request.setValue(NSString(format: "%d", body.length) as String, forHTTPHeaderField: "Content-Length")
return request
接受該請求的節點(使用multer和表達)
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(multer({
dest: './uploads',
rename: function (fieldname, filename) {
return filename.replace(/\W+/g, '-').toLowerCase() + Date.now()
}
}));