問題描述:
使用阿里雲OOS上傳圖片在火狐瀏覽器報錯 「XML 解析錯誤:找不到根元素」,但不影響功能的使用。阿里雲返回信息:
<Error>
<Code>AccessDenied</Code>
<Message>The bucket you visit is not belong to you.</Message>
<RequestId>5BDA7065399DF5A4B55</RequestId>
<HostId>test-oss1.oss-cn-shenzhen.aliyuncs.com</HostId>
</Error>
問題解決:
阿里雲在 PostObject 文檔裏有個參數「success_action_status」,「未指定success_action_redirect表單域時,該表單域指定了上傳成功後返回給客戶端的狀態碼。
接受值爲200, 201, 204(默認)。若是該域的值爲200或者204,OSS返回一個空文檔和相應的狀態碼。 若是該域的值設置爲201,OSS會返回一個XML文件和201狀態碼。 若是其值未設置或者設置成一個非法值,OSS返回一個空文檔和204狀態碼。」因此,以前返回不正常的這個問題,
只要強行指定返回201狀態碼,就能夠正常收到返回的XML了即須要有返回值,而且也沒有報錯的問題了。
能夠將上傳圖片的行爲當作是一次PUT請求。PUT請求的響應通常不會是200(200通常GET用,好比網頁),而是201或204;而204原本就是No Content,也就是「沒響應體」,那麼不須要返回結果(不關心是否上傳成功)的就用204,須要的就用201就好了。
【參考文章】:
前端圖片直傳OSS試驗前端