Как я могу загрузить изображение в директорию сервера напрямую с iOS через FTP - PullRequest
1 голос
/ 10 марта 2012

Я много искал, как загрузить изображения с моей фотопленки в каталог сервера, и я ничего не нашел! Итак, я скачал пример кода от Apple (SimpleFTPSample) и взял этот код ниже:

- (void)_startSend:(NSString *)filePath
{
    BOOL                    success;
    NSURL *                 url;
    CFWriteStreamRef        ftpStream;

    assert(filePath != nil);
    assert([[NSFileManager defaultManager] fileExistsAtPath:filePath]);
    assert( [filePath.pathExtension isEqual:@"png"] || [filePath.pathExtension isEqual:@"jpg"] );

    assert(self.networkStream == nil);      // don't tap send twice in a row!
    assert(self.fileStream == nil);         // ditto

    // First get and check the URL.

    url = [[AppDelegate sharedAppDelegate] smartURLForString:self.urlText.text];
    success = (url != nil);

    if (success) {
        // Add the last part of the file name to the end of the URL to form the final 
        // URL that we're going to put to.

        url = [NSMakeCollectable(
            CFURLCreateCopyAppendingPathComponent(NULL, (CFURLRef) url, (CFStringRef) [filePath lastPathComponent], false)
        ) autorelease];
        success = (url != nil);
    }

    // If the URL is bogus, let the user know.  Otherwise kick off the connection.

    if ( ! success) {
        self.statusLabel.text = @"Invalid URL";
    } else {

        // Open a stream for the file we're going to send.  We do not open this stream; 
        // NSURLConnection will do it for us.

        self.fileStream = [NSInputStream inputStreamWithFileAtPath:filePath];
        assert(self.fileStream != nil);

        [self.fileStream open];

        // Open a CFFTPStream for the URL.

        ftpStream = CFWriteStreamCreateWithFTPURL(NULL, (CFURLRef) url);
        assert(ftpStream != NULL);

        self.networkStream = (NSOutputStream *) ftpStream;

        if (self.usernameText.text.length != 0) {
            #pragma unused (success) //Adding this to appease the static analyzer.
            success = [self.networkStream setProperty:self.usernameText.text forKey:(id)kCFStreamPropertyFTPUserName];
            assert(success);
            success = [self.networkStream setProperty:self.passwordText.text forKey:(id)kCFStreamPropertyFTPPassword];
            assert(success);
        }

        self.networkStream.delegate = self;
        [self.networkStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
        [self.networkStream open];

        // Have to release ftpStream to balance out the create.  self.networkStream 
        // has retained this for our persistent use.

        CFRelease(ftpStream);

        // Tell the UI we're sending.

        [self _sendDidStart];
    }
}

Эти действия выполняют загрузку, но только для изображений, которые находятся в папке моего проекта. Так как можно загрузить изображение, выбранное в моем списке фотографий?

УВЕДОМЛЕНИЕ: Я уже создал UIImageView и заставил его отображать изображение с камеры, как обычно, но как можно загрузить то изображение, которое отображается в UIImageView

Ответы [ 2 ]

2 голосов
/ 10 марта 2012

скачайте эти библиотеки .

как его использовать:

#import "NSData+Base64.h"
@implementation.....
-(void)encodeImageAndSendToServer
{
//prepare the image
NSData *imageData = UIImageJPEGRepresentation(myImageView.image, 1.0);
myImageView.image = [UIImage imageWithData:imageData];    
NSString *myImageAsString = [imageData base64EncodedString];
}
@end

теперь вы можете публиковать myImageAsString на сервере .. обрабатывать данные myImageAsString в вашем веб-скрипте.если вы хотите использовать php, это может помочь вам ..

Вот как я управляю изображением на моем веб-сервере.

            <?php
            $imagestring = "your posted NSString from iphone";
            $file_name = 'myImage.jpg';
            $img = imagecreatefromstring(base64_decode($imagestring));
           if($img != false)
            {
             imagejpeg($img, '../images/comprofiler/gallery/'.$file_name);
            } 
1 голос
/ 10 марта 2012

Поскольку вы не можете получить доступ к файлу изображения в своих альбомах напрямую, вы должны использовать библиотеку ресурсов, чтобы получить NSData файла изображения и напрямую загрузить этот двоичный буфер (создайте свой fileStream как [NSInputStream inputStreamWithData: ...]

Как получить NSData из актива iOS: выберите GIF из библиотеки фотографий, преобразуйте в NSData для использования в multipart / form-data

Другой метод, упомянутый в этой теме, включает фактическое повторное сжатие данных изображения с потенциальной потерей качества / точности, что может иметь решающее значение в определенных ситуациях.

...