我试图将我的文件上传到S3服务vie AWSS3 SDK swft。我的代码:
let credentialsProvider = AWSStaticCredentialsProvider(accessKey: Config.main.accessKey, secretKey: Config.main.secretKey)
let configuration = AWSServiceConfiguration(region: .USEast1, endpoint: AWSEndpoint(url: URL(string: Config.main.AWS_ENDPOINT)!), credentialsProvider: credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration
let image = UIImage(named: "photo")!
let data: Data = image.pngData()!
let remoteName = generateRandomStringWithLength(length: 12) + "." + data.format
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let fileURL = documentsURL.appendingPathComponent(remoteName)
try! data.write(to: fileURL, options: .atomic)
upload(fileUrl: fileURL, fileData: data, fileName: remoteName, type: .image, completionHandler: {_ in})
func upload(fileUrl: URL, fileData: Data, fileName: String, type: FileTypes, completionHandler: @escaping (URL?) -> ()) {
let expression = AWSS3TransferUtilityUploadExpression()
expression.progressBlock = { task, progress in
DispatchQueue.main.async {
print("Progress = \(progress.completedUnitCount)/\(progress.totalUnitCount)")
}
}
let util = AWSS3TransferUtility.default()
util.uploadData(
fileData,
bucket: self.getBucket(type: type),
key: "\(self.getDir(type: type))_\(fileName)",
contentType: "image/png",
expression: expression) { task, error in
print("ERROR: \(error?.localizedDescription)")
print("response: \(task.response)")
print("response: \(task.response)")
}.continueWith { task in
if let error = task.error {
print("ERROR1: \(error.localizedDescription)")
}
return nil
}
}
它会给我5倍的进度响应,然后
错误:可选(“操作无法完成。(com.amazonaws.AWSS3TransferUtilityErrorDomain错误2.))
响应:可选({URL:http://(bucket)。(主机)/image_L24i8RGCeAaj.png?X-Amz-Algorithm=AWS4-HMAC-SHA256
同样设置的Android应用程序工作得非常完美。
这个问题的解决办法是什么?
这里有一些有用的信息https://medium.com/@刘易斯/签名-aws4-31DCFF1BF1F,杰夫·刘易斯。
它使用CryptoSwift
库;我现在正在将其转换为使用新的CryptoKit
。
hi如果不使用自定义endpoint,请更改此行:
let configuration=AWSServiceConfiguration(区域:.USEast1,endpoint:AWSEndpoint(url:url(字符串:Config.main.AWS_endpoint)!),credentialsProvider:credentialsProvider)
致:
让配置=AWSServiceConfiguration(区域:.USEast1,凭据提供商:凭据提供商)
它会很好的工作。SDK可以自行解析服务的endpoint,而无需提供endpoint。只有在使用自定义endpoint时,才需要提供endpoint。这里还值得注意的是,如果您确实想通过endpoint,则需要确保您通过了正确的endpoint,并且us-east-1 for s3有一个特殊的endpoint,该endpoint不包括区域,如下所示:
让配置=AWSServiceConfiguration(区域:.USEast1, endpoint: AWSEndpoint(url: URL(string:"https://s3.amazonaws.com ")) , 凭据提供商:凭据提供商)
我也有同样的问题。android上的一切都很好,而IOS的配置却不一样。
然后我联系了AWS支持,他们告诉我iPhone的日期和时间是错误的。我只是调整了日期和时间以更正日期和时间,然后尝试上传,结果成功了。
尝试将文件上载到S3 Bucket,我使用以下代码设置SDK: 错误日志 可能的错误: URL应基于以下表单:文档
我在Localhost中正确上传我的文件,但是当我在服务器上上传我的应用程序时,他们给我错误:上传文件后服务器错误。 这是我的控制器: 在我的本地主机中,文件保存在公用文件夹中。我想用public\u html或public\u html/image将我的文件保存在我的服务中。
有人能帮我弄清楚发生了什么吗? 我正在尝试加载测试一个用户可以上传和下载文件的应用程序。 旅程: 步骤1:当用户从磁盘选择文件(POST请求)时,它会创建一个文件ID和带有uuid的路径。 响应如下: 第2步:使用这些(POST请求),它用s3 uri响应,并带有评估码ID、秘书访问码和会话令牌。 响应如下:
我正在使用pyspark,在向S3写入数据时遇到了问题,但从S3读取数据并不是问题。 这是我的代码: 这是错误: 有什么问题?
开始时,我可以通过以下curl请求上传我的文件: curl-u“admin:admin”-X POSThttp://myurlu:9086/service/rest/v1/components?repository=ebooks-store“-H”accept:application/json“-H”内容类型:multipart/form data“-F”raw。目录=测试“-F”原始。asset
我测试了.NET web API,postman正在工作,但我尝试在Android中使用okhttp3和retrofit2。我都收到了内部服务器错误500。怎么了?我该怎么办? 分级 实现“com.squareup.okhttp3:okhttp:3.4.1” 实现“com.squareup.okhttp3:logging-interceptor:3.4.1” 实现“com.squareup.rev