0

我已经看到了许多不同的“答案”,但没有一个是完整的。这是我上传功能的当前代码。它应该足够完整以供讨论。尝试上传 .png 文件时出现 (500) 错误。.png 文件被 formbytes 流消耗,但是当它到达最后一行的实际请求时,它会抛出错误。帮助!

public void Upload(string uri, string filePath)
    {
        FileInfo fi = new FileInfo(filePath);
        string fileType = fi.Extension.Replace(".", "");
        string slug = fi.Name.Replace(fi.Extension, "");
        string formdataTemplate = "Content-Disposition: form-data; name=\"file\" filename=\"{0}\";\r\nContent-Type: application/octet-stream\r\n\r\n";
        string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
        byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
        request.Method = "POST";
        request.ContentType = "multipart/form-data; boundary=" + boundary;
        request.Accept = "application/json";

        if (cookies != null)
        {
        // cookies is a cookie container populated by another process, works for creating ALM requirements
            request.CookieContainer = cookies;
        }

        request.Headers.Add("slug", slug);

        string formitem = "";
        byte[] formbytes = null;
        using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            using (Stream requestStream = request.GetRequestStream())
            {
                requestStream.Write(boundarybytes, 0, boundarybytes.Length);
                formitem = string.Format(formdataTemplate, Path.GetFileName(filePath));
                formbytes = Encoding.UTF8.GetBytes(formitem);
                requestStream.Write(formbytes, 0, formbytes.Length);
                byte[] buffer = new byte[1024 * 4];
                int bytesLeft = 0;

                while ((bytesLeft = fileStream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    requestStream.Write(buffer, 0, bytesLeft);
                }

            }
        }
            //request.Headers.Add(formbytes);

        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { }

    }        
4

1 回答 1

0

答案是我必须检查添加附件的要求。这是一个简单的帖子,不需要正文:

/rest/domains/[domain]/projects/[project]/requirements/[entityId]/versions/check-out

您可以办理登机手续,也不需要任何人:

/rest/domains/[domain]/projects/[project]/requirements/[entityId]/versions/check-out

于 2017-11-20T19:11:45.210 回答