Windows phone 7 Windows Phone 7-将文件上载到FTP服务器

Windows phone 7 Windows Phone 7-将文件上载到FTP服务器,windows-phone-7,upload,ftp,Windows Phone 7,Upload,Ftp,Hy 我在WP7中做了一个应用程序,它连接一个FTP服务器。我想上传一张照片(带有photochoosertask) 我写了一个PhotoChooserTask(),我可以选择一张照片。程序保存照片名称(samplephoto01.jpg)和照片路径。 我编写了一个代码,将命令发送到FTP服务器: public static void Execute(String msg) { SocketAsyncEventArgs socketEventArg = new S

Hy

我在WP7中做了一个应用程序,它连接一个FTP服务器。我想上传一张照片(带有photochoosertask)

我写了一个PhotoChooserTask(),我可以选择一张照片。程序保存照片名称(samplephoto01.jpg)和照片路径。 我编写了一个代码,将命令发送到FTP服务器:

    public static void Execute(String msg)
    {
        SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
        Byte[] cmd = Encoding.UTF8.GetBytes((msg + "\r\n").ToCharArray());
        socketEventArg.SetBuffer(cmd, 0, cmd.Length);
        socket.SendAsync(socketEventArg);
    }
此代码我可以选择照片:

public void SelectAndUpLoad()
    {
        PhotoChooserTask p = new PhotoChooserTask();
        p.Completed += new EventHandler<PhotoResult>(pt_Completed);
        p.ShowCamera = true;
        p.Show();
    }

    void pt_Completed(object sender, PhotoResult e)
    {
        if (e.TaskResult == TaskResult.OK)
        {
            BitmapImage img = new BitmapImage();
            img.SetSource(e.ChosenPhoto);
            MediaLibrary library = new MediaLibrary();
            string PhotoPath = e.OriginalFileName;
           // MessageBox.Show(PhotoPath);
            for (int i = 0; i < library.Pictures.Count; i++)
            {
                Stream s = library.Pictures[i].GetImage();
                if (s.Length == e.ChosenPhoto.Length)
                {
                    string filename = library.Pictures[i].Name;
                    MessageBoxResult m = MessageBox.Show(filename, "Upload?", MessageBoxButton.OKCancel);
                    if (m == MessageBoxResult.OK)
                    {

                        Ftp.UploadFile(PhotoPath);

                    }
                    else
                    {
                        return;
                    }
                    break;
                }
            }
        }
    }
但是当我使用UploadFile()时;方法程序回答以下问题:

MethodAccessException未处理

此代码:

.
.
 Ftp.UploadFile(PhotoPath);

                    }
                    else
                    {     //MethodAccessException
                        return;
                    }
                    break;
                }
怎么了?谢谢大家!


我用IsolatedStorage将此代码重写为:

for (int i = 0; i < library.Pictures.Count; i++)
            {
                Stream s = library.Pictures[i].GetImage();
                if (s.Length == e.ChosenPhoto.Length)
                {
                    string filename = library.Pictures[i].Name;
                    MessageBoxResult m = MessageBox.Show(filename, "Upload?", MessageBoxButton.OKCancel);
                    if (m == MessageBoxResult.OK)
                    {
                        IsolatedStorageFile iss = IsolatedStorageFile.GetUserStoreForApplication();
                        IsolatedStorageFileStream fs = iss.OpenFile(PhotoPath, FileMode.Open);
                        Ftp.UploadFile(fs, filename);
                        fs.Close();
                    }
                    else
                    {
                        return;
                    }
                    break;
                }
            }
但我在这个来源中得到了一个例外:

IsolatedStorageFileStream fs = iss.OpenFile(PhotoPath, FileMode.Open);
例外情况是:IsolatedStorageException未被删除


怎么了?

我想你的问题在于:

    FileStream stream = new FileStream(file, FileMode.Open);
在WP7上不能以这种方式打开文件。要获取文件的流,您可以从隔离存储中打开它(假定文件存储在那里),或者使用内置方法提供的流

在您的例子中,流的属性为
e.ChosenPhoto
。你为什么不直接用呢

public static void UploadFile(Stream stream, string file)
{
    socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    Execute("STRO " + file);
    stream.Seek(0, SeekOrigin.Begin);
    stream.Close();
}

然后使用
e.ChosenPhoto
作为第一个参数调用
UploadFile

我认为您的问题在于:

    FileStream stream = new FileStream(file, FileMode.Open);
在WP7上不能以这种方式打开文件。要获取文件的流,您可以从隔离存储中打开它(假定文件存储在那里),或者使用内置方法提供的流

在您的例子中,流的属性为
e.ChosenPhoto
。你为什么不直接用呢

public static void UploadFile(Stream stream, string file)
{
    socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    Execute("STRO " + file);
    stream.Seek(0, SeekOrigin.Begin);
    stream.Close();
}
然后使用
e.ChosenPhoto
作为第一个参数调用
UploadFile