gpt4 book ai didi

cocoa - AF网络上传文件

转载 作者:行者123 更新时间:2023-12-03 17:34:38 26 4
gpt4 key购买 nike

我正在使用 AFNetworking 上传文件和AFAmazonS3Client到亚马逊S3。我循环遍历一个文件数组,所有文件都按预期成功上传到 S3 服务器,但在上传过程中,每个文件中都添加了不应该存在的额外内容。例如。添加到名为 kmeans.sh 的文件中的文本如下所示:

--Boundary+0xAbCdEfGbOuNdArY
Content-Disposition: form-data; name="file"; filename="kmeans.sh"
Content-Type: application/octet-stream

这种内容出现在每个文件的顶部。我的上传方法如下:

NSMutableURLRequest *request = [self 
multipartFormRequestWithMethod:method
path:destination
parameters:parameters
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

[formData appendPartWithFileData:data
name:@"file"
fileName:[fileURL.path lastPathComponent]
mimeType:self.mimetype];
}];

我在这里做错了什么,向我的文件添加了额外的信息?我真的不知道如何解决这个问题,并且我很感谢我可以尝试的任何建议。

更新:最初我按照 Matt 的建议做了,但我使用了 PUT 方法而不是 POST。今天我下载了最新版本的 AFAmazonS3Client 并尝试使用以下方法使用 PUT 和 POST 上传文件:

postObjectWithFile:(NSString *)path destinationPath:(NSString *)destinationPath parameters....
putObjectWithFile:(NSString *)path destinationPath:(NSString *)destinationPath parameters....

对于上传到存储桶 objcs3 且前缀为“Site3/hei/”的文件“Lima1996.pdf”,stringToSign 如下所示: 发布

multipart/form-data; boundary=Boundary+0xAbCdEfGbOuNdArY
Thu, 06 Jun 2013 00:37:04 GMT
/objcs3/Site3/hei/Lima1996.pdf

请求如下所示:

 auth: {
"Accept-Language" = "en;q=1, nb;q=0.9";
Authorization = "removed";
"Content-Length" = 915478;
"Content-Type" = "multipart/form-data; boundary=Boundary+0xAbCdEfGbOuNdArY";
Date = "Thu, 06 Jun 2013 00:37:04 GMT";
"User-Agent" = "connectCloudTest/1.0 (Mac OS X Version 10.8.4 (Build 12E55))";
}

一切看起来都不错,但是当我使用 POST 方法上传文件时,我不断收到错误消息

Upload failed Expected status code in (200-299), got 405 (-1011)

使用 PUT 方法会导致之前的错误,即上传成功,但内容因额外的 header 信息而出现乱码,如原始问题所示。非常感谢您的建议!

感谢您的帮助!干杯,特隆德

最佳答案

通过替换AFAmazonS3Client中的putObjectWithMethod,我成功上传了我的文件,没有任何额外的 header 。与:

 (void)putObjectWithMethod:(NSString *)method
file:(NSString *)filePath
destinationPath:(NSString *)destinationPath
parameters:(NSDictionary *)parameters
progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress
success:(void (^)(id responseObject))success
failure:(void (^)(NSError *error))failure
{
NSMutableURLRequest *filerequest = [NSMutableURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]];
[filerequest setCachePolicy:NSURLCacheStorageNotAllowed];

NSURLResponse *response = nil;
NSError *error = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:filerequest returningResponse:&response error:&error];

if (data && response) {

NSMutableURLRequest *request = [super requestWithMethod:@"PUT" path:destinationPath parameters:nil];
[self authorizeRequest:request withPath:destinationPath];
[request setHTTPBody:data];

AFHTTPRequestOperation *requestOperation = [self HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
success(responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}];

[requestOperation setUploadProgressBlock:progress];
[self enqueueHTTPRequestOperation:requestOperation];
}

}

我不知道为什么我的 POST 方法从来没有工作过,但是使用 PUT 一切都工作得很好。干杯,特隆德

关于cocoa - AF网络上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16926165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com