APIを使ってDropBoxに大きなファイルのアップロードができないです
やります!アンコちゃんにバックアップ機能を作るべくごにょごにょしていますが、壁にぶつかっています。
DropBoxのAPIって単純なアップロード命令では、150Mバイトまでしかサポートされておらず、それ以上をやりたいときは分割してアップロードするAPIを使わないといけないのです。
英語のドキュメントと、英語のラッパーライブラリを眺めて、機能追加することを決意したところまではよかったのですが、何やら挙動がおかしい。
4096バイトしか送っていないのに、次のポインタが4103とかになっていて無理やり動くようにしてこんな感じ。
動いているように見えてはいますが・・・
public CommitUploadchunkResponse UploadChunk(string Dest, string filename, int chunksize = 4*1024) { if (!Dest.StartsWith("/")) { Dest = "/" + Dest; } if (!System.IO.File.Exists(filename)) { return null; } byte[] _buffer=new byte[chunksize]; string fn = (new System.IO.DirectoryInfo(filename)).Name; int offset = 0; string upload_id = ""; //ファイルを開く using (System.IO.FileStream fs = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read)) { long size = fs.Length; while (true) { int len = fs.Read(_buffer, 0, chunksize); if (len == 0) break; byte[] _putbuff = new byte[len]; Buffer.BlockCopy(_buffer, 0, _putbuff, 0, len); var request = _requestHelper.CreateUploadChunkFileRequest(_putbuff, fn, upload_id, offset); try { var res = Execute<UploadchunkResponse>(ApiType.Content, request); upload_id = res.upload_id; offset = (int)res.offset; //Console.WriteLine("{0} {1} {2}", upload_id, offset,size); } catch { Console.WriteLine("error"); } if (len < chunksize) break; } } var commitrequest = _requestHelper.CreateUploadChunkCommitRequest(upload_id, Dest + "/" + fn,Root); var response = _restClientContent.Execute<CommitUploadchunkResponse>(commitrequest); Console.WriteLine(response.StatusCode); return response.Data; }
アップロードしたファイルの前後にMultipartの区切りがwww
-------------------------------28947758029299 Content-Disposition: form-data; name="file"; filename="allowRelVerup.txt" Content-Type: application/octet-stream バージョンアップをすべて行う場合、このファイルが必要です -------------------------------28947758029299--
とりあえず、後回しにして、来週ぐらいには出したいと思います。