mirror of
https://github.com/go-gitea/gitea.git
synced 2026-07-17 15:14:17 -05:00
Create file in a repository with Rest API (content, encoding and special chars escape) #3774
Closed
opened 2025-11-02 05:24:46 -06:00 by GiteaMirror
·
10 comments
No Branch/Tag Specified
main
release/v1.25
release/v1.24
release/v1.23
release/v1.22
release/v1.21
release/v1.20
release/v1.19
release/v1.18
release/v1.17
release/v1.16
release/v1.15
release/v1.14
release/v1.13
release/v1.12
release/v1.11
release/v1.10
release/v1.9
release/v1.8
v1.25.3
v1.25.2
v1.25.1
v1.25.0
v1.24.7
v1.25.0-rc0
v1.26.0-dev
v1.24.6
v1.24.5
v1.24.4
v1.24.3
v1.24.2
v1.24.1
v1.24.0
v1.23.8
v1.24.0-rc0
v1.25.0-dev
v1.23.7
v1.23.6
v1.23.5
v1.23.4
v1.23.3
v1.23.2
v1.23.1
v1.23.0
v1.23.0-rc0
v1.24.0-dev
v1.22.6
v1.22.5
v1.22.4
v1.22.3
v1.22.2
v1.22.1
v1.22.0
v1.23.0-dev
v1.22.0-rc1
v1.21.11
v1.22.0-rc0
v1.21.10
v1.21.9
v1.21.8
v1.21.7
v1.21.6
v1.21.5
v1.21.4
v1.21.3
v1.21.2
v1.20.6
v1.21.1
v1.21.0
v1.21.0-rc2
v1.21.0-rc1
v1.20.5
v1.22.0-dev
v1.21.0-rc0
v1.20.4
v1.20.3
v1.20.2
v1.20.1
v1.20.0
v1.19.4
v1.21.0-dev
v1.20.0-rc2
v1.20.0-rc1
v1.20.0-rc0
v1.19.3
v1.19.2
v1.19.1
v1.19.0
v1.19.0-rc1
v1.20.0-dev
v1.19.0-rc0
v1.18.5
v1.18.4
v1.18.3
v1.18.2
v1.18.1
v1.18.0
v1.17.4
v1.18.0-rc1
v1.19.0-dev
v1.18.0-rc0
v1.17.3
v1.17.2
v1.17.1
v1.17.0
v1.17.0-rc2
v1.16.9
v1.17.0-rc1
v1.18.0-dev
v1.16.8
v1.16.7
v1.16.6
v1.16.5
v1.16.4
v1.16.3
v1.16.2
v1.16.1
v1.16.0
v1.15.11
v1.17.0-dev
v1.16.0-rc1
v1.15.10
v1.15.9
v1.15.8
v1.15.7
v1.15.6
v1.15.5
v1.15.4
v1.15.3
v1.15.2
v1.15.1
v1.14.7
v1.15.0
v1.15.0-rc3
v1.14.6
v1.15.0-rc2
v1.14.5
v1.16.0-dev
v1.15.0-rc1
v1.14.4
v1.14.3
v1.14.2
v1.14.1
v1.14.0
v1.13.7
v1.14.0-rc2
v1.13.6
v1.13.5
v1.14.0-rc1
v1.15.0-dev
v1.13.4
v1.13.3
v1.13.2
v1.13.1
v1.13.0
v1.12.6
v1.13.0-rc2
v1.14.0-dev
v1.13.0-rc1
v1.12.5
v1.12.4
v1.12.3
v1.12.2
v1.12.1
v1.11.8
v1.12.0
v1.11.7
v1.12.0-rc2
v1.11.6
v1.12.0-rc1
v1.13.0-dev
v1.11.5
v1.11.4
v1.11.3
v1.10.6
v1.12.0-dev
v1.11.2
v1.10.5
v1.11.1
v1.10.4
v1.11.0
v1.11.0-rc2
v1.10.3
v1.11.0-rc1
v1.10.2
v1.10.1
v1.10.0
v1.9.6
v1.9.5
v1.10.0-rc2
v1.11.0-dev
v1.10.0-rc1
v1.9.4
v1.9.3
v1.9.2
v1.9.1
v1.9.0
v1.9.0-rc2
v1.10.0-dev
v1.9.0-rc1
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.8.0-rc3
v1.7.6
v1.8.0-rc2
v1.7.5
v1.8.0-rc1
v1.9.0-dev
v1.7.4
v1.7.3
v1.7.2
v1.7.1
v1.7.0
v1.7.0-rc3
v1.6.4
v1.7.0-rc2
v1.6.3
v1.7.0-rc1
v1.7.0-dev
v1.6.2
v1.6.1
v1.6.0
v1.6.0-rc2
v1.5.3
v1.6.0-rc1
v1.6.0-dev
v1.5.2
v1.5.1
v1.5.0
v1.5.0-rc2
v1.5.0-rc1
v1.5.0-dev
v1.4.3
v1.4.2
v1.4.1
v1.4.0
v1.4.0-rc3
v1.4.0-rc2
v1.3.3
v1.4.0-rc1
v1.3.2
v1.3.1
v1.3.0
v1.3.0-rc2
v1.3.0-rc1
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.2.0-rc3
v1.2.0-rc2
v1.1.4
v1.2.0-rc1
v1.1.3
v1.1.2
v1.1.1
v1.1.0
v1.0.2
v1.0.1
v1.0.0
v0.9.99
Labels
Clear labels
$20
$250
$50
$500
backport/done
💎 Bounty
docs-update-needed
good first issue
hacktoberfest
issue/bounty
issue/confirmed
issue/critical
issue/duplicate
issue/needs-feedback
issue/not-a-bug
issue/regression
issue/stale
issue/workaround
lgtm/need 2
modifies/api
modifies/translation
outdated/backport/v1.18
outdated/theme/markdown
outdated/theme/timetracker
performance/bigrepo
performance/cpu
performance/memory
performance/speed
pr/breaking
proposal/accepted
proposal/rejected
pr/wip
pull-request
reviewed/wontfix
💰 Rewarded
skip-changelog
status/blocked
topic/accessibility
topic/api
topic/authentication
topic/build
topic/code-linting
topic/commit-signing
topic/content-rendering
topic/deployment
topic/distribution
topic/federation
topic/gitea-actions
topic/issues
topic/lfs
topic/mobile
topic/moderation
topic/packages
topic/pr
topic/projects
topic/repo
topic/repo-migration
topic/security
topic/theme
topic/ui
topic/ui-interaction
topic/ux
topic/webhooks
topic/wiki
type/bug
type/deprecation
type/docs
type/enhancement
type/feature
type/miscellaneous
type/proposal
type/question
type/refactoring
type/summary
type/testing
type/upstream
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/gitea#3774
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @fraballi on GitHub (Aug 13, 2019).
What is the correct encoding and format for using this endpoint:
http://localhost:3000/api/swagger#/repository/repoCreateFile
I got this error (without base64 conversion):
[{"classification":"DeserializationError","message":"invalid character '\n' in string literal"}]
Then I converted to base64 the file content and got another error:
Error in char 0
Also, how to escape correctly those special chars during file content extraction?
@richmahn commented on GitHub (Aug 26, 2019):
@fraballi Should be base64. Can you paste the encoding here?
@fraballi commented on GitHub (Aug 26, 2019):
Many thanks, on your reply.
I had many issues with encoding and JSON deserialization. Ending chars and
line breaks fails for Go/JSON deserializer API, even if a base64 content is
sent to your REST API (Google/Stackoverflow answers)
Steps:
$my_file="the-file.yml"
*1) File content: *file_content=$(iconv -c -f
(file -b --mime-encodingmy_file) -t UTF-8 $my_file)
2) Base64 conversion: base64_content=$(echo -n $file_content | base64)
Choice)
*I decided to use git push (so I had more than one file). *
Do you have any API feature that uploads a folder into a repository?
;-)
El lun., 26 ago. 2019 a las 14:21, Richard Mahn (notifications@github.com)
escribió:
@richmahn commented on GitHub (Aug 26, 2019):
Kind of confused by your reply, but I did my own testing and it seems like I had to run base64 on a UTF-16 string, not UTF-8. For example, this content fails:
VGhpcyBpcyBzb21lCgpjb250ZW50IHdpdGggbmV3IGxpbmVzIGFuZCBcInF1b3RlZCBxdW90ZXNcIgoKYW5kIHNvbWUgY2hpbmVzZSDkvaDlpb0KCg===but this encoding in base64 works:
//5UAGgAaQBzACAAaQBzACAAcwBvAG0AZQAKAAoAYwBvAG4AdABlAG4AdAAgAHcAaQB0AGgAIABuAGUAdwAgAGwAaQBuAGUAcwAgAGEAbgBkACAAXAAiAHEAdQBvAHQAZQBkACAAcQB1AG8AdABlAHMAXAAiAAoACgBhAG4AZAAgAHMAbwBtAGUAIABjAGgAaQBuAGUAcwBlACAAYE99WQoACgA=Not sure if that is a bug or what should be expected. Here is my whole payload to the POST
http://localhost:3000/api/v1/repos/{owner}/{repo}/contents/test.txtAPI:That content string is base64 encoding of a UTF-16 string. You can see that decoded here: https://bg.door43.org/richmahn/test_this/src/branch/master/test_special_characters.txt
@fraballi commented on GitHub (Aug 26, 2019):
Thanks, that seems to be the issue: UTF-16 replacing UTF-8.
Which conversion function shall be used for UTF-16?
I missed REST part in my previous thread, but that's it. Using "content"
part in a JSON payload.
Thanks for the help.
El lun., 26 ago. 2019 a las 14:38, Richard Mahn (notifications@github.com)
escribió:
@guillep2k commented on GitHub (Aug 26, 2019):
I'm not familiar with this API endpoint, but it does look like a bug to me:
content-typefield to the request JSON.@richmahn commented on GitHub (Sep 4, 2019):
I agree. I thought it was odd I had to use UTF-16 to encode it into base64 for our decoder to work. Apparently it works out of the box that way? I'll keep a bookmark on this issue and see if I can get the encoding to work with UTF-8
@stale[bot] commented on GitHub (Nov 3, 2019):
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs during the next 2 weeks. Thank you for your contributions.
@zeeshan1112 commented on GitHub (Jul 14, 2020):
@richmahn How did you make it work with UTF-16 encoding?
String bytesEncodedContent = Base64.getEncoder().encodeToString(content.getBytes(StandardCharsets.UTF_16));This did not help. I get characters as � in github viewer for special characters.
Any suggestions?
@richmahn commented on GitHub (Aug 13, 2020):
@zeeshan1112 I believe I was just using an online base64 decoder to make the payload to Gitea. I don't think I was actually doing it in an app, but I could be mistaken as it was a year ago.
@stale[bot] commented on GitHub (Aug 22, 2021):
This issue has been automatically marked as stale because it has not had recent activity. I am here to help clear issues left open even if solved or waiting for more insight. This issue will be closed if no further activity occurs during the next 2 weeks. If the issue is still valid just add a comment to keep it alive. Thank you for your contributions.