3

API経由でbox.netにファイルをアップロードしたいのですが、この方法で投稿リクエストを介してファイルを投稿しています

Box.NET のドキュメントによると、リクエスト URL は次のとおりです。

https://upload.box.net/api/1.0/upload/<auth token>/<folder id>

ここにドキュメントがありますhttp://developers.box.net/w/page/12923951/ApiFunction_Upload%20and%20Download

WebRequest request = WebRequest.Create("https://upload.box.net/api/1.0/upload...;
request.Method = "POST";

byte[] byteArray = File.ReadAllBytes(@"C:\a.docx");

request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close(); 

このメッセージ「upload_no_files_found」で例外が発生します

4

3 に答える 3

1

このサンプル アップロード リクエストのページによると、Box.net はnew_file1、 、shareなどのパラメータをリクエストしますemails[]

したがって、ファイルだけでなく、このパラメーターを送信する必要があります。パラメーターを投稿する方法に関するMSDNサンプルから、重要なポイントは、送信するファイルでこの完全な文字列を作成することです。送信するファイルのパラメーターとなるこの行に注目します。

    string postData = "firstone=" + inputData;
    ASCIIEncoding encoding = new ASCIIEncoding ();
    byte[] byte1 = encoding.GetBytes (postData);

あなたの場合、これは次のようになります

    string postData = "share=1&emails[]=test@domain.com&new_file1=" + FileData;
    ASCIIEncoding encoding = new ASCIIEncoding ();
    byte[] byte1 = encoding.GetBytes (postData);

最終的なコードは次のようになります。

     WebRequest request = WebRequest.Create("https://upload.box.net/api/1.0/<auth_token>/<file_id>/<version_id>;
     request.Method = "POST";

    // open and read file
    byte[] byteArray = File.ReadAllBytes(@"C:\a.docx");

    // make the parametres
    string postData = "share=1&emails[]=test@domain.com&new_file1=";
    ASCIIEncoding encoding = new ASCIIEncoding ();
    byte[] parametres = encoding.GetBytes (postData);

    // set the Type
    request.ContentType = "application/x-www-form-urlencoded";
    // the full length.
    request.ContentLength = parametres.Length + byteArray.Length;

    // now we go for post
    Stream dataStream = request.GetRequestStream();
    // send the parametres
    dataStream.Write(parametres, 0, parametres.Length);
    // follow the file
    dataStream.Write(byteArray, 0, byteArray.Length);

    // flush and close what you have send  
    dataStream.Close();

これがアイデアですが、このコードをデバッグしてテストすることはできません。最初からそのままでは機能しない可能性があり、変更とデバッグが必要です。

于 2012-07-02T11:14:33.000 に答える
0

これが役立つ場合があります。v2 API と RestSharp を使用しています。

    // as per http://developers.box.com/docs/#files-upload-a-file
        RestClient client1 = new RestClient();
        client1.BaseUrl = "https://upload.box.com";
        var request = new RestRequest(Method.POST);
        request.Resource = "api/2.0/files/data";
        string Headers = string.Format("BoxAuth api_key={0}&auth_token={1}",
                api_key,
                AuthToken);
        request.AddHeader("Authorization", Headers);
        request.AddParameter("folder_id", FolderID);
        request.AddFile("filename", filePath);

        //request.RequestFormat = DataFormat.Json;
        var response = client1.Execute(request);
        return response.Content;
于 2012-08-04T12:06:23.233 に答える
0

フォルダーの作成と Box.net および BOX API を介したドキュメントのアップロード

public void Upload_Doc(string folder_id, string accessToken)
    {
   var client = new RestClient("https://upload.box.com/api/2.0");
    var request = new RestRequest("files/content", Method.POST);
    request.AddParameter("parent_id", folder_id);

    request.AddHeader("Authorization", "Bearer " + accessToken);

    string path = @"D:\Project\21Teach\Documents\screenshots.docx";
    byte[] byteArray = System.IO.File.ReadAllBytes(path);

    request.AddFile("filename", byteArray, "screenshots.docx");

    var responses = client.Execute(request);
    var content = responses.Content;
}
static string folderCreation(string APIKey, string authToken)
{

    RestClient client = new RestClient();
    client.BaseUrl = "https://api.box.com/2.0/folders";
    var request = new RestRequest(Method.POST);
    string Headers = string.Format("Bearer {0}", authToken);
    request.AddHeader("Authorization", Headers);
    request.AddParameter("application/json", "{\"name\":\"Youka\",\"parent\":{\"id\":\"0\"}}", ParameterType.RequestBody);
    var response = client.Execute(request);
    return response.Content;



}
于 2014-02-25T13:02:58.680 に答える