私は開発しているXamarin.iOSアプリケーションで解決する必要がある問題の解決策を探して、数時間Webを精査してきました。現場の顧客のほとんどではないにしても、私たちのバックエンドのFTPに行く作業指示(チケット)に添付する写真をアップロードする必要があります。私の同僚はAndroidアプリを開発し、FtpWebRequestにキャストされたFtpRequestに基づいて、現在の方法を採用しました。ユーザーがまともな接続をしている場合、サーバーは90%の時間で正常に動作し、サーバーにアップロードされます。ファイルをFTPサーバーにアップロードするのにNSUrlSessionを使用できますか?
問題がありますか?私は時間の100%を必要とし、私はそれがバックグラウンドにあることが必要です。私はNSUrlSessionがiOSにネイティブでバックグラウンドをサポートしているので、この問題を解決するためにNSUrlSessionが最善の策であるとわかりました。私の唯一の問題は、session.CreateUploadTask
でUploadTaskを作成しようとすると、「パスでファイルを読み取ることができません」と表示され、パスはfile://var/mobile/Containers/Data/Application/850CB1FE-9C2D-456C-8B5F-921DC8D5CEF5/Documents/PolarisPictures2/VUPSXOUTA722002799CMC5022017103109544681088_1.jpeg
です。私はすでにファイルがそのパス上に存在することを確認しました。ファイル名はforeach(var file in Directory.EnumerateFiles(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "PolarisPictures2"))
を使用して出力します。file://プロトコルを使用しないと、「... is not a valid file:// url。」というエラーが返されます。それで、私がファイルに正しくアクセスしていないか、それとも単に私がしようとしていることをする方法がないのでしょうか?
また、方法がない場合は、誰でも私が必要とするバックグランド機能を最大限に発揮するソリューションを提供できますか?
よろしくお願いします。
ありがとうございました。
は、ここに私のコードです:
NSUrlSession session = null;
NSUrlSessionConfiguration config = NSUrlSessionConfiguration.CreateBackgroundSessionConfiguration("com.PolarisFTPUpload.BackgroundSession");
session = NSUrlSession.FromConfiguration(config, (NSUrlSessionDelegate)new MySessionDelegate(), new NSOperationQueue());
string docs = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
docs = docs.Replace("/var", "file://var");
string filepath = System.IO.Path.Combine(docs, "PolarisPictures2/VUPSXOUTA722002799CMC5022017103109544681088_1.jpeg");
Console.WriteLine(filepath);
string UploadURLString = "ftp://myftpUser:[email protected]:Port/Pictures/Database" + "/" + DateTime.Today.Year + "/" + DateTime.Today.Month + "/" + DateTime.Today.Day + "/";
NSUrlSessionUploadTask uploadTask;
NSUrl uploadURL = NSUrl.FromString(UploadURLString);
NSUrlRequest req = NSUrlRequest.FromUrl(uploadURL);
uploadTask = session.CreateUploadTask(req, NSUrl.FromString(filepath));
私は聞くああ、残念ながら私はその決定の仲裁人ではありませんが、兄です。アップルのドキュメンテーションを読んで数日後にあなたが100%正しいと言い、最終的に私のHTTPポストアップロードが動作すると言います。私は.NET Web APIを使ってこれを行いました。ここではFTPよりもはるかに多くのアプリケーションの機能を網羅しています。私たちは、私の同意するソフトウェアの古い部分をいくつか変更する必要があります。ありがとう、しかし!間違いなく、質問に対する適切な答え。 –