2

私はiPhone開発に不慣れです.pdfファイルのリクエストをドキュメントディレクトリから次のようなWebサービスに送信する方法について質問があります

http://www.publigeee.com/index.php?q=api/upload&uid=1&title=Sample&file=insert Pdf file here 

このリンクにそのpdfファイルを挿入するにはどうすればよいですか? これに5時間費やしましたが、できません。助けてください

前もって感謝します

4

2 に答える 2

1

基本的に、アプリケーションのドキュメント ディレクトリに存在するファイルをアップロードすることに関心があります。上記の場合、PDF ファイルをサーバーにアップロードする必要があります。

次の方法を使用して、XMLファイルに対して同じことを実装しました-

//この関数は、ファイルがドキュメント ディレクトリに存在することを前提としています

- (void)uploadXMLFile:(NSString*)sourceFileName atPath:(NSString*)filePath{


    // constructing connection request for url with no local and remote cache data and timeout seconds
    NSURL* scriptURL = [NSURL URLWithString:kFileUploadScriptURL];


    NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:scriptURL cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:20];

    [request setHTTPMethod:@"POST"];

    NSString *charset = (NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));

    // allocation mem for body data
    NSMutableData* bodyData = [[[NSMutableData alloc] init] autorelease];

    // initializing post body boundary
    NSString *stringBoundary = @"0xKhTmLbOuNdArY";

    // setting request header required
    // request containing multi part form data body and identified charater set encoding
    [request setAllHTTPHeaderFields:[NSDictionary dictionaryWithObjectsAndKeys:
                                     [NSString stringWithFormat:@"multipart/form-data; charset=%@; boundary=%@", charset, stringBoundary],@"Content-Type",
                                     @"gzip",@"Accept-Encoding",nil]];

    // appending body string
    [bodyData appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];

    // Adds post data

    // Adds files to upload
    // file data identify its content type, data encoding and content disposition 
    // file is identified through its file name on server 
    // file data is retrived from the identified file url

    [bodyData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", @"file", sourceFileName] dataUsingEncoding:NSUTF8StringEncoding]];
    [bodyData appendData:[[NSString stringWithFormat:@"Content-Type: %@; charset=%@\r\n\r\n", @"document/xml", charset] dataUsingEncoding:NSUTF8StringEncoding]];

    [bodyData appendData:[NSData dataWithContentsOfFile:filePath]];

    [bodyData appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];

    // set post body to request
    [request setHTTPBody:bodyData];

    NSString* bodyDataString = [[NSString alloc] initWithData:bodyData encoding:NSUTF8StringEncoding];
    NSLog(@"%@",bodyDataString);

    // create new connection for the request
    // schedule this connection to respond to the current run loop with common loop mode.

    //  NSURLResponse *response = nil;                    
    //  NSError *error = nil;
    //  NSLog(@"%@",[[[NSString alloc] initWithData: [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error] encoding:NSUTF8StringEncoding]autorelease]);

    [[NSURLConnection alloc] initWithRequest:request  delegate:self];
    if (!responseData) {
        self.responseData = [[[NSMutableData alloc] initWithLength:0] autorelease];
    }
}

ここで、kFileUploadScriptURL はサーバー URL の定数です

#define kFileUploadScriptURL @"SERVER_ADDRESS/upload_file.php"

upload.php は基本的に、データを受け入れてサーバー上のディレクトリの 1 つに書き込むための PHP スクリプトを保持します。したがって、XML ファイルがサーバーにアップロードされます。関数内の目的のパラメーターを置き換えて、PDF をアップロードするように設定できます。タイトルなどの他のパラメータも希望するため、HTTP POST を使用してこれらを渡す必要があります。

私の答えをSOに関する他の質問と本当にリンクできるかどうかはわかりませんが、これはあなたが尋ねたものに本当に近いです。

于 2012-11-16T09:08:49.370 に答える
0

HTTP POSTを使用する必要があります。URLに任意のファイルを追加することはできません(サイズを指定すると、リクエストがすぐに削除されます)。

iOSからHTTPPOSTする方法を探してください-この情報はたくさんあります。また、参照しているサイト(www.publicgee.com)は、あるエンドポイントでPOSTメソッドをサポートしている必要があります。そうしないと、単純にサポートできません。

それで:

  1. www.publigee.comがPOSTをどのようにサポートしているかをご覧ください
  2. HTTPPOST操作を使用してファイルを送信するようにコードを変更します
于 2012-11-16T09:02:05.450 に答える