1

このコードをで動作させることができないようですStreamsends API。私はインターネットのいたるところにいて、私がやろうとしていることに関連する情報をほとんど見つけていません。私は彼らのサーバーにファイルをアップロードしようとしています。誰かがこれを見て、多分ここで私を助けることができますか?

Streamsendアプリケーション自体の中にあると彼らが言うStreamsendsサーバーから500エラーが発生し続けます。面白いのは、コメントアウトされている下部近くの行を取得する場合です

//request.ContentType = "multipart/form-data";

コメントを外すと、無効なデータを示す422エラーが発生します。境界に何か問題があるようです。

私はC#にかなり慣れていません。また、Streamsends APIを使用するのはこれが初めてなので、助けていただければ幸いです。

m_Method = "POST"
m_Action = "uploads"
private string StreamSendResponse(string Path, string FileName)
    {
        string sReturn = String.Empty;
        string sLocation = String.Empty;

        string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
        byte[] boundarybytes = Encoding.ASCII.GetBytes(Environment.NewLine + "--" + boundary + Environment.NewLine);

        Uri addy = new Uri(m_URI + m_Action);

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(addy);
        request.ContentType = "multipart/form-data; boundary=" + boundary;           

        request.Method = m_Method;

        request.KeepAlive = true;
        request.Headers.Add("Authorization", "Basic " + Merv.base64Encode(m_ID + ":" + m_Key));

        Stream rs = request.GetRequestStream();

        string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n{1}";
        NameValueCollection nvc = new NameValueCollection();

        foreach (string key in nvc.Keys)
        {
            rs.Write(boundarybytes, 0, boundarybytes.Length);
            string formitem = string.Format(formdataTemplate, key, nvc[key]);
            byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
            rs.Write(formitembytes, 0, formitembytes.Length);
        }

        rs.Write(boundarybytes, 0, boundarybytes.Length);

        string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n Content-Type: application/octet-stream\r\n";

        string header = string.Format(headerTemplate, "data", FileName);

        byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
        rs.Write(headerbytes, 0, headerbytes.Length);

        FileStream fileStream = new FileStream(Path + FileName, FileMode.Open, FileAccess.Read);
        byte[] buffer = new byte[4096];
        int bytesRead = 0;
        while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
        {
            rs.Write(buffer, 0, bytesRead);
        }
        fileStream.Close();

        byte[] trailer = System.Text.Encoding.ASCII.GetBytes(Environment.NewLine + "--" + boundary + "--" + Environment.NewLine);

        rs.Write(trailer, 0, trailer.Length);
        rs.Close();

        request.Accept = "application/xml";
        //request.ContentType = "multipart/form-data";

        try
        {
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader srResponse = new StreamReader(response.GetResponseStream());
            sLocation = response.Headers["Location"];
            sReturn = srResponse.ReadToEnd().Trim();
        }
        catch (WebException exc)
        {

            StreamReader srResponse = new StreamReader(response.GetResponseStream());
            sReturn = srResponse.ReadToEnd().Trim();
            sLocation = exc.Message;
        }
        if (sReturn == String.Empty)
        {
            sReturn = sLocation;
        }

        return sReturn;
    }
4

0 に答える 0