Ubuntu One: PUT для загрузки файла размером более 16302 байт систематически не работает

Я пытаюсь создать приложение для загрузки / выгрузки файлов в Ubuntu One, используя облачный API. Сейчас я нахожусь в стадии реализации части загрузки приложения, и у меня есть эта проблема с моим тестовым примером:

Все файлы размером до 16303 байт загружаются без каких-либо проблем.

Все файлы размером более 16303 байта систематически не загружаются, при этом возвращается код состояния 500.

Я часами искал в интернете похожую проблему, но безрезультатно.

Я использую язык Go, и вот вызов Ubuntu One REST API (обработка ошибок и служебный код удалены для краткости):

// 'n' is an object which describes the file to upload (path, size, etc.)
file, _ := os.Open(localTargetDir + n.Path)
apiUrl, _ := url.Parse("https://files.one.ubuntu.com/content" + remoteTargetDir + n.Path)
// Following line returns a pointer to a Request object with the "Authorization" 
// fields in the header all properly set
request, _ := ubuntuoneGetSignedRequest("PUT", apiUrl.String(), file)
request.Header.Add("Content-Length", fmt.Sprintf("%d", n.Size))
request.Header.Add("Content-Type", "application/octet-stream")
response, _ := http.DefaultClient.Do(request)
if response.StatusCode >= 300 {
    return errors.New(fmt.Sprintf("Error (status=%d) creating remote file: %s", response.StatusCode, n.Path))
}
// ...

Как уже было сказано, размер файла 16303-16304 байта это точка опоры, где загрузка начнется сбой систематически. Я понятия не имею, в чем проблема.

2
задан 22 January 2013 в 04:01

1 ответ

Наконец-то нашел проблему. Это вещь на языке Go, а не Ubuntu One.

Очевидно, поле request.ContentLength должно быть правильно установлено:

request.Header.Add("Content-Type", "application/octet-stream")
request.ContentLength = n.Size
response, _ := http.DefaultClient.Do(request)

Это может показаться очевидным в ретроспективе (не совсем, так как оно работало нормально для файлов, меньших 16304 ...), но Я не видел этого в документации на Go.

Надеюсь, это будет полезно для кого-то, кто сталкивается с подобной проблемой.

0
ответ дан 22 January 2013 в 04:01

Другие вопросы по тегам:

Похожие вопросы: