【问题标题】:Unable to upload file to salesforce using c#无法使用c#将文件上传到salesforce
【发布时间】:2020-09-23 10:16:28
【问题描述】:

我正在使用 Salesforce v49.0。我编写了将文件(txt 文件)从我的目录上传到 salesforce 的代码。 我在我的 salesforce 帐户中创建了一个文件夹。 我在尝试上传时收到错误请求。 请帮助找到解决方案或建议任何其他上传文件的方法。

我的代码

        string oauthToken = (string)loginResponse["access_token"];
        string serviceUrl = (string)loginResponse["instance_url"];
        var doc = new sfdcDocument();
        doc.Name = "DocumentbyDuke";
        doc.FolderId = "05He0000RE00CcKDERTD";
        doc.Type = "txt";
        doc.Keywords = "123";
        doc.Description = "123";
        string boundary = "----" + DateTime.Now.Ticks.ToString("x");

        var uri = serviceUrl + "/services/data/v49.0/sobjects/Document/";
        var req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri);
        req.Headers.Add("Authorization: OAuth " + oauthToken);
        req.ContentType = "multipart/form-data; boundary=" + boundary;
        req.Method = "POST";
        var os = req.GetRequestStream();


        // Add header for JSON part
        string body = "";
        body += "\r\n--" + boundary + "\r\n"; ;
        body += "Content-Disposition: form-data; name='entity_document'\r\n";
        body += "Content-Type: application/json\r\n\r\n";

        // Add document object data in JSON
        body += JsonConvert.SerializeObject(doc);


        // Add header for binary part 
        body += "\r\n--" + boundary + "\r\n"; ;
        body += "Content-Disposition: form-data; name='Body'; filename='1.txt'\r\n";
        body += "Content-Type: binary/octet-stream\r\n\r\n";


        // Add header data to request
        byte[] data = System.Text.Encoding.ASCII.GetBytes(body);
        os.Write(data, 0, data.Length);

        // Add file to reqeust
        FileStream fileStream = new FileStream(@"C:\Users\AprilFile.txt", FileMode.Open, FileAccess.ReadWrite);
        byte[] buffer = new byte[4096];
        int bytesRead = 0;
        while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
        {
            os.Write(buffer, 0, bytesRead);
        }
        fileStream.Close();

        // Add trailer
        byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
        os.Write(trailer, 0, trailer.Length);
        os.Close();


        // Do the post and get the response.
        WebResponse resp;

        try
        {
            resp = req.GetResponse();
        }
        catch (WebException ex)
        {
            resp = ex.Response;
        }

        //if (resp == null) return null;
        var sr = new System.IO.StreamReader(resp.GetResponseStream());

【问题讨论】:

  • 我运行了来自Fiddler 的代码和捕获的响应。它显示 87 [{"message":"Folder ID: id value of wrong type: *08He0000000sqweER","errorCode":"FIELD_INTEGRITY_EXCEPTION","fields":["FolderId"]}] 0

标签: c# salesforce httprequest salesforce-lightning


【解决方案1】:

08H,如您的评论中所示,不是任何类型文件夹的键前缀。它似乎属于一个名为CleanBatchErrorLog 的不起眼的sObject。

05H对应ContentDistributionView,也是不正确的。

虽然可能存在其他问题,但您肯定需要找到正确的文件夹 ID 来存储此文档。

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多