gpt4 book ai didi

iphone - Apple 文档中提供的 SimpleFTPSample 中的打开流错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:26 26 4
gpt4 key购买 nike

我想通过ftp上传图片到服务器。

我找到了一个 SimpleFTPSample在苹果文档中,并下载了它。

运行应用程序时(我使用的是 xcode 4.5.2,目标是 iphone 5.0 模拟器),它工作正常。我正在尝试通过此应用在我的服务器中创建目录并成功。

但是,上传应用程序中提供的图像时会导致“打开流错误”。我没有对应用程序进行任何更改。只需输入网址、用户名和密码即可。我认为这没有问题,因为我指定的目录已成功创建。

创建目录时,url 为“ftp://54.x.y.z/newfolder/”,创建成功。

但是,上传时 url 是“ftp://54.x.y.z/TestImage1.png”

文件路径是“/var/folders/pn/8p0jc4qn70v37j58c1kwf8l80000gn/T/TestImage1.png”

url 是通过在最后一个组件字符串后附加我指定的 ftp url 获得的。

那么,它的错误在哪里呢?

在 fn 中,

 - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{



case NSStreamEventErrorOccurred: {
[self stopSendWithStatus:@"Stream open error"];
} break;

被调用并显示Stream open error。

我用谷歌搜索了一整天,没有找到需要的结果。它非常紧急,我什至无法为此开始赏金。请帮忙

最佳答案

试试这个....

     - (void)sendDidStart
{
// self.statusLabel.text = @"Sending";
[[NetworkManager sharedInstance] didStartNetworkOperation];

}

- (void)updateStatus:(NSString *)statusString
{
assert(statusString != nil);
//self.statusLabel.text = statusString;
}

- (void)sendDidStopWithStatus:(NSString *)statusString
{
if (statusString == nil) {
statusString = @"Put succeeded";
}
[[NetworkManager sharedInstance] didStopNetworkOperation];
}

#pragma mark * Core transfer code

// This is the code that actually does the networking.

// Because buffer is declared as an array, you have to use a custom getter.
// A synthesised getter doesn't compile.

- (uint8_t *)buffer
{
return self->_buffer;
}

- (BOOL)isSending
{
return (self.networkStream != nil);
}

- (void)startSend:(NSString *)filePath
{
BOOL success;
NSURL * url;
NSLog(@"localFilePathforImage..:%@",localFilePathforImage);
assert(localFilePathforImage != nil);
assert([[NSFileManager defaultManager] fileExistsAtPath:localFilePathforImage]);
assert( [localFilePathforImage.pathExtension isEqual:@"png"] || [localFilePathforImage.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 = [[NetworkManager sharedInstance] smartURLForString:@"ftp://80.544/"];
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 = CFBridgingRelease(
CFURLCreateCopyAppendingPathComponent(NULL, ( CFURLRef) url, ( CFStringRef) imageString , false)
);
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:localFilePathforImage];
assert(self.fileStream != nil);

[self.fileStream open];

// Open a CFFTPStream for the URL.

self.networkStream = CFBridgingRelease(
CFWriteStreamCreateWithFTPURL(NULL, ( CFURLRef) url)
);
assert(self.networkStream != nil);

// if ([self.usernameText.text length] != 0) {
success = [self.networkStream setProperty:@"yourusername" forKey:(id)kCFStreamPropertyFTPUserName];
assert(success);
success = [self.networkStream setProperty:@"password" forKey:(id)kCFStreamPropertyFTPPassword];
assert(success);
//}

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

// Tell the UI we're sending.

[self sendDidStart];
}
}

- (void)stopSendWithStatus:(NSString *)statusString
{
if (self.networkStream != nil) {
[self.networkStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
self.networkStream.delegate = nil;
[self.networkStream close];
self.networkStream = nil;
}
if (self.fileStream != nil) {
[self.fileStream close];
self.fileStream = nil;
}
[self sendDidStopWithStatus:statusString];
}

- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
// An NSStream delegate callback that's called when events happen on our
// network stream.
{
#pragma unused(aStream)
assert(aStream == self.networkStream);

switch (eventCode) {
case NSStreamEventOpenCompleted: {
[self updateStatus:@"Opened connection"];
} break;
case NSStreamEventHasBytesAvailable: {
assert(NO); // should never happen for the output stream
} break;
case NSStreamEventHasSpaceAvailable: {
[self updateStatus:@"Sending"];

// If we don't have any data buffered, go read the next chunk of data.

if (self.bufferOffset == self.bufferLimit) {
NSInteger bytesRead;

bytesRead = [self.fileStream read:self.buffer maxLength:sSendBufferSize];

if (bytesRead == -1) {
[self stopSendWithStatus:@"File read error"];
} else if (bytesRead == 0) {
[self stopSendWithStatus:nil];
} else {
self.bufferOffset = 0;
self.bufferLimit = bytesRead;
}
}

// If we're not out of data completely, send the next chunk.

if (self.bufferOffset != self.bufferLimit) {
NSInteger bytesWritten;
bytesWritten = [self.networkStream write:&self.buffer[self.bufferOffset] maxLength:self.bufferLimit - self.bufferOffset];
assert(bytesWritten != 0);
if (bytesWritten == -1) {
[self stopSendWithStatus:@"Network write error"];
} else {
self.bufferOffset += bytesWritten;
}
}
} break;
case NSStreamEventErrorOccurred: {
[self stopSendWithStatus:@"Stream open error"];
} break;
case NSStreamEventEndEncountered: {
// ignore
} break;
default: {
assert(NO);
} break;

}
}

关于iphone - Apple 文档中提供的 SimpleFTPSample 中的打开流错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14459265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com