文件从swift上传到django

时间:2015-04-30 18:44:48

标签: python django swift amazon-web-services amazon-s3

我正在尝试使用django后端将照片和视频从swift iOS app上传到amazon s3。我找到了一个django应用程序,使用https://github.com/bradleyg/django-s3direct将django连接到s3。问题是我不知道如何将文件从swift上传到django。

django-s3direct我在管理面板中工作,他们提供了一个很好的方法来生成上传文件的表单,但我不知道如何使用这个django插件从swift上传文件。

我是否应该找到将django后端连接到亚马逊s3的不同方式?那里有一个教程吗? (我找不到任何一个)

1 个答案:

答案 0 :(得分:1)

您的观点应该能够通过FILES请求收到POST,并且当您从常规html表单收到上传的图片时,可以接收常规操作。那么你所要做的就是在iOS中创建 multipart 表单并将其发布到接收者URL。一旦你在表单中提交照片,你的django应用程序应该做S3的事情。因此,您的问题就是如何将选定的图像从iOS发布到Web服务表单作为多部分表单。此代码证明了这一点。

var imageData :NSData = UIImageJPEGRepresentation(imagenReduced, 1.0);       
var request: NSMutableURLRequest?
let HTTPMethod: String = "POST"
var timeoutInterval: NSTimeInterval = 60
var HTTPShouldHandleCookies: Bool = false

request = NSMutableURLRequest(URL: url)
request!.HTTPMethod = HTTPMethod
request!.timeoutInterval = timeoutInterval
request!.HTTPShouldHandleCookies = HTTPShouldHandleCookies


let boundary = "----------SwIfTeRhTtPrEqUeStBoUnDaRy"
let contentType = "multipart/form-data; boundary=\(boundary)"
request!.setValue(contentType, forHTTPHeaderField:"Content-Type")
var body = NSMutableData();


 let tempData = NSMutableData()
 let fileName = filenames + ".jpg" //"prueba.jpg"
 let parameterName = "userfile"


let mimeType = "application/octet-stream"

tempData.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
let fileNameContentDisposition = fileName != nil ? "filename=\"\(fileName)\"" : ""
let contentDisposition = "Content-Disposition: form-data; name=\"\(parameterName)\"; \(fileNameContentDisposition)\r\n"
tempData.appendData(contentDisposition.dataUsingEncoding(NSUTF8StringEncoding)!)
tempData.appendData("Content-Type: \(mimeType)\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
tempData.appendData(imageData)
tempData.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)

body.appendData(tempData)

body.appendData("\r\n--\(boundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)

request!.setValue("\(body.length)", forHTTPHeaderField: "Content-Length")
request!.HTTPBody = body



var vl_error :NSErrorPointer = nil
var responseData  = NSURLConnection.sendSynchronousRequest(request,returningResponse: nil, error:vl_error)

var results = NSString(data:responseData, encoding:NSUTF8StringEncoding)
println("finish \(results)")