【问题标题】:File upload from swift to django文件从 swift 上传到 django
【发布时间】:2015-05-01 06:08:34
【问题描述】:

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

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

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

【问题讨论】:

  • 首先你需要以某种方式连接 swift 文件系统,你的媒体根在 swift 上吗?我需要更多的布局来帮助你。此外,如果你在一个带有 swift / django 服务器的 vpn 上,那么这很容易,或者使用 nginx 和 SMB 提供媒体取决于许多因素
  • 不确定媒体根是什么......它在 iPhone 上......我想使用 NSURLConnection.sendAsynchronousRequest 连接......我在发送多部分表单数据时发现了这个 stackoverflow.com/questions/29045228/… 但仍然没有想法如何为此编写后端代码
  • 你有使用 django-rest-framework 吗?您仍然需要一种方法让应用程序与 Django 连接/验证
  • 完成这项工作的最简单方法是在 django 中构建 rest api,让客户端能够使用 authtokens 或其他方式登录,从那里 s3direct 中的 post 端点应该处理其余的。
  • 是的,所以我有休息框架。我只是不知道如何处理我在请求中发送的帖子数据,以便使用这个 django 插件上传到 s3

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


【解决方案1】:

您的视图应该能够接收带有POST 请求的FILES 以及当您从常规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)")

【讨论】:

  • 在 Django 端:request.FILES['what key is here"]?
猜你喜欢
  • 2012-07-17
  • 2018-09-01
  • 2018-12-01
  • 2023-04-11
  • 2021-05-21
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
相关资源
最近更新 更多