如何将图像数据上传到具有特定文件名的服务器?

时间:2012-02-28 09:08:05

标签: iphone html objective-c post file-upload

Xcode源代码

NSString *path = [self pathOfCharacterFolder];
    path = [path stringByAppendingPathComponent:[[self fileNamesOfCharacters] objectAtIndex:sender.tag]];
    NSData *imageData = [NSData dataWithContentsOfFile:path];

// setting up the URL to post to
NSString *urlString = @"http://temp-sample-page/uploadfile.html";

// setting up the request object now
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];

NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];

请检查以下源代码......

NSString *contentType = [NSString stringWithFormat:@"text/html;charset=UTF-8; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];

NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"rn--%@rn",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image\"; filename=\"123456700.png\"rn"] 
                      dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: multipart/form-datarnrn"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"rn--%@--rn",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[request setHTTPBody:body];

// now lets make the connection to the web
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

有什么问题? (html页面工作正常)

示例页面HTML代码

<html>

<head>

<META http-equiv="Content-Type" content="text/html;charset=UTF-8">

<title>Upload Example</title>

<script>
    function validate() {
        var image =document.getElementById("image").value;
        if(image!=''){
            var checkimg = image.toLowerCase();
            if (!checkimg.match(/(\.jpg|\.png|\.JPG|\.PNG|\.jpeg|\.JPEG)$/)){
                alert("Please enter Image File Extensions .jpg,.png,.jpeg");
                document.getElementById("image").focus();
                return false;
            }
        }
        return true;
    }
</script>

</head>

<body>

<form action="/uploadfile.html" method="post"
    enctype="multipart/form-data" onSubmit="return validate();">

    <fieldset><legend>Upload File</legend>
    <table>
        <tr>
            <td><input name="fileData" id="image" type="file" /></td>
        </tr>
        <tr>
            <td><br />
            </td>
            <td><input type="submit" value="Upload" /></td>
        </tr>
    </table>
    </fieldset>
</form>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

使用以下代码:(rn更改为:\ r \ n)回车符和换行符。

NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image\"; filename=\"123456700.png\"\r\n"] 
                      dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: image/jpg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[request setHTTPBody:body];

Upadted Code:

我也不确定你的imageData。你是如何创造它的?

NSMutableData *body = [NSMutableData data];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=picture; filename=\"123456700.png\"\r\n"] 
                          dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithString:@"Content-Type: image/png\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[NSData dataWithData:imageData]];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

    [request setHTTPBody:body];