以下のコードを使用して、サーバーに画像を投稿します。
NSString *localCacheDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Downloads"];
NSString *localPathToSaveFile = [localCacheDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"lion.jpg"]];
NSMutableString *urlForUploadingAttachment = MY_SERVER_URL;
NSData *myData = [NSData dataWithContentsOfFile:localPathToSaveFile];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[request setHTTPShouldHandleCookies:NO];
[request setTimeoutInterval:30];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"--------";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request setValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
// add image data
NSData *imageData = UIImageJPEGRepresentation([UIImage imageWithContentsOfFile:localPathToSaveFile], 1.0);
if (imageData) {
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"image.jpg\"\r\n", @"lion.jpg"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData];
[body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
}
// setting the body of the post to the reqeust
[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
// set the content-length
NSString *postLength = [NSString stringWithFormat:@"%d", [body length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
// set URL
[request setURL:[NSURL URLWithString:urlForUploadingAttachment]];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString* returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"%@", returnString);
サーバー側の.netアプリケーションでは、ファイルを次のように記述します
public void SaveAttachment(string filePath, string fileName)
{
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
string fullFilePath = filepath + "\\" + fileName;
using (Stream file = File.OpenWrite(fullFilePath))
{
CopyStream(Request.InputStream, file);
try
{
file.Close();
}
catch (Exception ex) { }
}
}
public void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8 * 1024]; int len;
while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, len);
}
}
しかし、サーバーによって書き込まれたファイルは破損しています。ファイルが書き込まれますが、開くこともプレビューすることもできません。ファイルサイズも期待通り。しかし、画像をダブルクリックすると、ファイルが破損しているか、破損しているか、大きすぎるというメッセージが表示されます。ここでの問題は何ですか?誰かがこれで私を助けてくれますか?