iOS 使用 Node.js 与 Multiparty 和 GraphicsMagick 将图像上传到 S3
iOS Image upload to S3 by using Node.js with Multiparty and GraphicsMagick
我们有一个网站正在使用 ng-file-upload 向后端发送上传图片的请求。它将图像转换成不同的大小并上传到 Amazon S3 服务器。它在网络上运行良好。我们的 front-end 和 back-end 包含 JS 代码。
我们可以从 iOS 应用程序上传文件到 AWS SDK for iOS,但是这需要太多时间,而且请求一直超时。
根据要求,使用常规方法将文件从iOS App上传到服务器(节点),然后转换为不同的大小( ng-file-upload - multiparty & GraphicsMagick) & 然后上传到 Amazon 服务器 (S3).
所以,我们使用传统方法将图片上传到后端服务器。
图片上传代码
NSMutableURLRequest *urlRequest = [NSMutableURLRequest
requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:DEFAULT_TIMEOUT];
[urlRequest setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831464368775746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[urlRequest addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
//Image
if(imageData)
{
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", imgName, imgName] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData];
[body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
}
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[urlRequest setHTTPBody:body];
我们在 node.js 后端使用 multiparty。即使我们无法获取任何文件 object 来填充以进行进一步的步骤。它在后端抛出错误。
从应用程序上传时,请求 headers 中的文件详细信息在后端为空。所以,我们得到一个像 'path' undefined.
这样的错误
因此,我们没有将任何文件或图像发送到后端,因此无法进一步处理对话以及上传。我们卡在了这个地方。
我认为你必须遵循两个步骤 -
1- 请在服务器(节点)上验证一次脚本文件名必须与从 iOS.
发送的文件名相同
2- 来自 ios 我们正在使用这样的方式在服务器上上传图片。
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\" ; filename=\"%@\"\r\n", imgName] dataUsingEncoding:NSUTF8StringEncoding]];
name=\"userfile\" 必须与服务器脚本匹配。
我们有一个网站正在使用 ng-file-upload 向后端发送上传图片的请求。它将图像转换成不同的大小并上传到 Amazon S3 服务器。它在网络上运行良好。我们的 front-end 和 back-end 包含 JS 代码。
我们可以从 iOS 应用程序上传文件到 AWS SDK for iOS,但是这需要太多时间,而且请求一直超时。
根据要求,使用常规方法将文件从iOS App上传到服务器(节点),然后转换为不同的大小( ng-file-upload - multiparty & GraphicsMagick) & 然后上传到 Amazon 服务器 (S3).
所以,我们使用传统方法将图片上传到后端服务器。
图片上传代码
NSMutableURLRequest *urlRequest = [NSMutableURLRequest
requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:DEFAULT_TIMEOUT];
[urlRequest setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831464368775746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[urlRequest addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
//Image
if(imageData)
{
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", imgName, imgName] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData];
[body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
}
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[urlRequest setHTTPBody:body];
我们在 node.js 后端使用 multiparty。即使我们无法获取任何文件 object 来填充以进行进一步的步骤。它在后端抛出错误。
从应用程序上传时,请求 headers 中的文件详细信息在后端为空。所以,我们得到一个像 'path' undefined.
这样的错误因此,我们没有将任何文件或图像发送到后端,因此无法进一步处理对话以及上传。我们卡在了这个地方。
我认为你必须遵循两个步骤 -
1- 请在服务器(节点)上验证一次脚本文件名必须与从 iOS.
发送的文件名相同2- 来自 ios 我们正在使用这样的方式在服务器上上传图片。
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\" ; filename=\"%@\"\r\n", imgName] dataUsingEncoding:NSUTF8StringEncoding]];
name=\"userfile\" 必须与服务器脚本匹配。