2015-04-30 41 views
0

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

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

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

+0

首先您需要以某种方式连接swift文件系统,您的媒体根目录是swift吗?我需要更多的布局来帮助你。另外,如果你在一个与swift/django服务器的VPN,那么它可以很容易,或服务于媒体使用Nginx和SMB取决于许多因素 – Mikeec3

+0

不知道什么媒体的根......是在iPhone上..我想使用NSURLConnection.sendAsynchronousRequest连接...我发现这在发送多部分形式的数据http://stackoverflow.com/questions/29045228/how-to-convert-video-file-to-multiform-data-in-swift但仍然不知道如何写这个 – Tyler

+0

的后端代码那么你有没有使用django-rest-framework?你仍然需要一种方式让应用程序连接/验证与Django – Mikeec3

回答

1

你的观点应该能够收到FILESPOST请求和常规的事情来做,当你从常规的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)")