我有一个方法,使用WebRequest将文件上传到sharepoint 2010列表/文件夹,使用PUT请求,并将Overwrite Header设置为T(覆盖)。
当上传多个文件(多次调用方法)时,某些请求会因409 Conflict HTTP错误而失败。
我用谷歌搜索,似乎最常见的原因是试图影响/更新不存在的文件(比如将请求URL设置为没有文件名的路径)。但事实并非如此。如果冲突与已经存在的文件有关,我在上传之前添加了代码来物理删除文件,我仍然得到了一些409。
有没有人收到过这种类型的错误,如果有的话,你能告诉我你是如何解决的吗?根本原因是什么?任何帮助是极大的赞赏。感谢
答案 0 :(得分:23)
由于没有发布答案,我找到了以下here:
Web服务器(运行Web站点)认为客户端(例如您的Web浏览器或我们的CheckUpDown机器人)提交的请求无法完成,因为它与已建立的某些规则冲突。例如,如果您尝试将文件上载到比已经存在的文件更旧的Web服务器,则可能会收到409错误,从而导致版本控制冲突。
similar question right here on stackoverflow上有人说答案是:
当我引用文档的url时,我遇到了这个问题 库而不是目标文件本身。
即。试试
http://server name/document library name/new file name.doc
但是我100%确定这不是我的情况,因为我多次检查了WebRequest的URI属性,并且URI完成了文件名,路径中的所有文件夹都存在于sharepoint站点上。
无论如何,我希望这有助于某人。
答案 1 :(得分:3)
我在使用webdav和http web请求上传文件时发现了两件值得一提的东西。首先,对于我使用的提供程序,我必须在提供程序URL的末尾附加文件名。我要在网址中附加端口号。我还将Request方法设置为PUT而不是POST。
示例:
string webdavUrl = "https://localhost:443/downloads/test.pdf";
request.Method = "PUT";
答案 2 :(得分:3)
有时,当您将文件夹或文件命名为保留或阻止名称时,会出现错误代码 409
。这些名称可能是 register
、contact
就我而言,我将文件夹命名为 contact
,结果该名称被阻止用作文件夹名称。
在 postman
上测试我的脚本时,我收到此错误:
<script>
document.cookie = "humans_21909=1"; document.location.reload(true)
</script>
我将文件夹名称从联系人更改为联系人,并且成功了。错误消失了。
答案 3 :(得分:1)
当我们尝试以毫秒为单位访问同一资源时,我们也遇到了同样的错误。就像我尝试POST
某些数据到www.abc.com/blog
并且以毫秒为单位时,其他请求也将来自同一用户的相同资源,即www.abc.com/blog
。所以它会给出409
错误。
答案 4 :(得分:0)
上传返回的文件时遇到类似的问题409。
除了上面提到的问题之外,由于服务器端POST的文件大小限制,也可能发生这种情况。例如,tomcat(java web服务器)默认为POST size limit of 2MB。
答案 5 :(得分:0)
尝试创建文件夹http://localhost:8080/repository/default/parent/newFolder时出现此错误 http://localhost:8080/repository/default/parent不存在的时候。
答案 6 :(得分:0)
这是因为提供的路径错误。可能是该网址包含空格,以及是否必须正确构造大小写网址。
正确的url格式应包含文件名,例如“ http://server名称/文档库名称/新文件名”
因此,如果report.xlsx是必须以“ http://server name / Team / Dev Team”上传的文件,则路径应为“ http://server name / Team / Dev Team / report.xlsx”。它包含空格,因此应将其重建为“ http://server name / Team / Dev%20Team / report.xlsx”,并应使用。
答案 7 :(得分:0)
由于不同的原因,我多次遇到此问题。我将在此处列出其中一些。
Chrome 浏览器正在缓存请求。您可以在 Chrome 开发者控制台中禁用此功能,也可以在代码中使用标头 {cache: 'no-cache'}
放置文件时嵌套文件夹路径不存在。在将文件放入嵌套文件夹之前,请先确保该文件夹存在。
新文件和旧文件内容(大致)相同,提交信息也一样。只需将提交消息更改为更加随机化。在提交消息中使用类似的内容。
const date = new Date()
const timeStampHash = `${date.toISOString()}-${Math.floor(Math.random() * 1000)}`
const commitMsg = `Commited from my App: #${timestampHash}`
答案 8 :(得分:-1)
我是因为您正在使用预定义变量来命名文件名。将您的文件名从例如register.asp更改为registerUser.asp。这样可以解决您的问题
答案 9 :(得分:-1)
请重命名您的 API 文件或文件夹名称 喜欢- xyz.com/注册.php 将其重命名为 xyz.com/myregister.php
某个名称,关键字在收到此错误时被阻止