You've already forked joplin
							
							
				mirror of
				https://github.com/laurent22/joplin.git
				synced 2025-10-31 00:07:48 +02:00 
			
		
		
		
	
		
			
	
	
		
			466 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
		
		
			
		
	
	
			466 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
|   | <!doctype html> | ||
|  | <html> | ||
|  | 
 | ||
|  | <!--
 | ||
|  | 
 | ||
|  | !!! WARNING !!! | ||
|  | 
 | ||
|  | This file was auto-generated from readme/spec/server_file_url_format.md and any manual change | ||
|  | made to it will be overwritten. To make a change to this file please modify | ||
|  | the source Markdown file: | ||
|  | 
 | ||
|  | https://github.com/laurent22/joplin/blob/dev/readme/spec/server_file_url_format.md | ||
|  | 
 | ||
|  | --> | ||
|  | 
 | ||
|  | <head> | ||
|  | 	<title>Structure of file URLs in Joplin Server | Joplin</title> | ||
|  | 	<meta charset="utf-8"> | ||
|  | 	<meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||
|  | 	<meta name="viewport" content="width=device-width, initial-scale=1"> | ||
|  | 	<link rel="stylesheet" href="https://joplinapp.org/css/bootstrap.min.css"> | ||
|  | 	<link rel="shortcut icon" type="image/x-icon" href="https://joplinapp.org/favicon.ico"> | ||
|  | 	<!-- <link rel="stylesheet" href="https://joplinapp.org/css/fontawesome-all.min.css">  --> | ||
|  | 	<link rel="stylesheet" href="https://joplinapp.org/css/fork-awesome.min.css">  | ||
|  | 	<script src="https://joplinapp.org/js/jquery-3.2.1.slim.min.js"></script> | ||
|  | 	<style> | ||
|  | 	body { | ||
|  | 		background-color: #F1F1F1; | ||
|  | 		color: #333333; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	.root { | ||
|  | 		overflow: hidden; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	a[href^="mailto:"] { | ||
|  | 		word-break: break-all; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	table { | ||
|  | 		margin-bottom: 1em; | ||
|  | 	} | ||
|  | 	td, th { | ||
|  | 		padding: .8em; | ||
|  | 		border: 1px solid #ccc; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	.page-markdown table pre, | ||
|  | 	.page-markdown table blockquote { | ||
|  | 		margin-bottom: 0; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	.page-markdown table pre, | ||
|  | 	.page-markdown table blockquote { | ||
|  | 		margin-bottom: 0; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	.page-markdown table pre { | ||
|  | 		background-color: rgba(0,0,0,0); | ||
|  | 		border: none; | ||
|  | 		margin: 0; | ||
|  | 		padding: 0; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	h1, h2 { | ||
|  | 		border-bottom: 1px solid #eaecef; | ||
|  | 		padding-bottom: 0.3em; | ||
|  | 		font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; | ||
|  | 		font-weight: 600; | ||
|  | 		font-size: 2em; | ||
|  | 		margin-bottom: 16px; | ||
|  | 	} | ||
|  | 	h2 { | ||
|  | 		font-size: 1.6em; | ||
|  | 	} | ||
|  | 	h3 { | ||
|  | 		font-size: 1.3em; | ||
|  | 	} | ||
|  | 	code { | ||
|  | 		color: black; | ||
|  | 		background-color: #eee; | ||
|  | 		border: 1px solid #ccc; | ||
|  | 		font-size: .85em; | ||
|  | 	/*	word-break: break-all; */ | ||
|  | 	} | ||
|  | 	pre code { | ||
|  | 		border: none; | ||
|  | 	} | ||
|  | 	pre { | ||
|  | 		font-size: .85em; | ||
|  | 	} | ||
|  | 	blockquote { | ||
|  | 		font-size: 1em; | ||
|  | 		color: #555; | ||
|  | 	}; | ||
|  | 	#toc ul { | ||
|  | 		margin-bottom: 10px; | ||
|  | 	} | ||
|  | 	#toc > ul > li { | ||
|  | 		margin-bottom: 10px; | ||
|  | 	} | ||
|  | 	#toc { | ||
|  | 		padding-bottom: 1em; | ||
|  | 	} | ||
|  | 	.title { | ||
|  | 		display: flex; | ||
|  | 		align-items: center; | ||
|  | 	} | ||
|  | 	.title-icon { | ||
|  | 		display: flex; | ||
|  | 		height: 1em; | ||
|  | 	} | ||
|  | 	.title-text { | ||
|  | 		display: flex; | ||
|  | 		font-weight: normal; | ||
|  | 		margin-bottom: .2em; | ||
|  | 		margin-left: .5em; | ||
|  | 	} | ||
|  | 	.sub-title { | ||
|  | 		font-weight: normal; | ||
|  | 	} | ||
|  | 	.container { | ||
|  | 		background-color: white; | ||
|  | 		padding: 0; | ||
|  | 		box-shadow: 0 10px 20px #888888; | ||
|  | 	} | ||
|  | 	table.screenshots { | ||
|  | 		margin-top: 2em; | ||
|  | 		margin-bottom: 2em; | ||
|  | 	} | ||
|  | 	table.screenshots th { | ||
|  | 		height: 3em; | ||
|  | 		text-align: center; | ||
|  | 	} | ||
|  | 	table.screenshots th,  | ||
|  | 	table.screenshots td { | ||
|  | 		border: 1px solid #C2C2C2; | ||
|  | 	} | ||
|  | 	img[align="left"] { | ||
|  | 		margin-right: 10px; | ||
|  | 		margin-bottom: 10px; | ||
|  | 	} | ||
|  | 	.mobile-screenshot { | ||
|  | 		height: 40em; | ||
|  | 		padding: 1em; | ||
|  | 	} | ||
|  | 	.cli-screenshot-wrapper { | ||
|  | 		background-color: black; | ||
|  | 		vertical-align: top; | ||
|  | 		padding: 1em 2em 1em 1em; | ||
|  | 	} | ||
|  | 	.cli-screenshot { | ||
|  | 		font-family: "Monaco", "Inconsolata", "CONSOLAS", "Deja Vu Sans Mono", "Droid Sans Mono", "Andale Mono", monospace; | ||
|  | 		background-color: black; | ||
|  | 		color: white; | ||
|  | 		border: none; | ||
|  | 	} | ||
|  | 	.cli-screenshot .prompt { | ||
|  | 		color: #48C2F0; | ||
|  | 	} | ||
|  | 	.top-screenshot { | ||
|  | 		margin-top: 2em; | ||
|  | 		text-align: center; | ||
|  | 	} | ||
|  | 	.header { | ||
|  | 		position: relative; | ||
|  | 		padding-left: 2em; | ||
|  | 		padding-right: 2em; | ||
|  | 		padding-top: 1em; | ||
|  | 		padding-bottom: 1em; | ||
|  | 		color: white; | ||
|  | 		background-color: #2B2B3D; | ||
|  | 	} | ||
|  | 	.header a h1 { | ||
|  | 		color: white; | ||
|  | 	} | ||
|  | 	.header a:hover { | ||
|  | 		text-decoration: none; | ||
|  | 	} | ||
|  | 	.content { | ||
|  | 		padding-left: 2em; | ||
|  | 		padding-right: 2em; | ||
|  | 		padding-bottom: 2em; | ||
|  | 		padding-top: 2em; | ||
|  | 	} | ||
|  | 	.forkme { | ||
|  | 		position: absolute; | ||
|  | 		right: 0; | ||
|  | 		top:0; | ||
|  | 	} | ||
|  | 	.nav-wrapper { | ||
|  | 		position: relative; | ||
|  | 		width: inherit; | ||
|  | 	} | ||
|  | 	.nav { | ||
|  | 		background-color: black; | ||
|  | 		display: flex; | ||
|  | 		flex-direction: row; | ||
|  | 		align-items: center; | ||
|  | 	} | ||
|  | 	.nav.sticky { | ||
|  | 		position:fixed; | ||
|  | 		top: 0; | ||
|  | 		width: inherit; | ||
|  | 		box-shadow: 0 0 10px #000000; | ||
|  | 	} | ||
|  | 	.nav a { | ||
|  | 		color: white; | ||
|  | 		display: inline-block; | ||
|  | 		padding: .6em .9em .6em .9em; | ||
|  | 	} | ||
|  | 	.nav ul { | ||
|  | 		padding-left: 2em; | ||
|  | 		margin-bottom: 0; | ||
|  | 		display: table-cell; | ||
|  | 		display: flex; | ||
|  | 		width: 100%; | ||
|  | 		/* For GSoC: */ | ||
|  | 		min-width: 470px; | ||
|  | 	} | ||
|  | 	.nav ul li { | ||
|  | 		display: inline-block; | ||
|  | 		padding: 0; | ||
|  | 	} | ||
|  | 	.nav li.selected { | ||
|  | 		background-color: #222; | ||
|  | 		font-weight: bold; | ||
|  | 	} | ||
|  | 	.nav-right { | ||
|  | 		display: flex; | ||
|  | 		text-align: right; | ||
|  | 		vertical-align: middle; | ||
|  | 		line-height: 0; | ||
|  | 		margin-right: 10px; | ||
|  | 	} | ||
|  | 	.nav-right .share-btn { | ||
|  | 		display: none; | ||
|  | 	} | ||
|  | 	.nav-right .small-share-btn { | ||
|  | 		display: none; | ||
|  | 	} | ||
|  | 	.footer { | ||
|  | 		padding: 2em; | ||
|  | 		border-top: 1px solid #d4d4d4; | ||
|  | 		margin-top: 2em; | ||
|  | 		color: gray; | ||
|  | 		font-size: .9em; | ||
|  | 	} | ||
|  | 	a.heading-anchor { | ||
|  | 		display: inline-block; | ||
|  | 		opacity: 0; | ||
|  | 		width: 1.3em; | ||
|  | 		font-size: 0.7em; | ||
|  | 		margin-left: 0.4em; | ||
|  | 		line-height: 1em; | ||
|  | 		text-decoration: none; | ||
|  | 		transition: opacity 0.3s; | ||
|  | 	} | ||
|  | 	a.heading-anchor:hover, | ||
|  | 	h1:hover a.heading-anchor, | ||
|  | 	h2:hover a.heading-anchor, | ||
|  | 	h3:hover a.heading-anchor, | ||
|  | 	h4:hover a.heading-anchor, | ||
|  | 	h5:hover a.heading-anchor, | ||
|  | 	h6:hover a.heading-anchor { | ||
|  | 		opacity: 1; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	@media (min-width: 992px) { | ||
|  | 		.content{ | ||
|  | 			display: flex; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		#toc{ | ||
|  | 			display: block!important; | ||
|  | 			align-self: flex-start; | ||
|  | 			width: 300px; | ||
|  | 			position: sticky; top: 20px; left: 0;             | ||
|  | 		} | ||
|  | 
 | ||
|  | 		.main{ | ||
|  | 			width: calc(100% - 300px); | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	.bottom-links { | ||
|  | 		display: flex; | ||
|  | 		justify-content: center; | ||
|  | 		border-top: 1px solid #d4d4d4; | ||
|  | 		margin-top: 30px; | ||
|  | 		padding-top: 25px; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	@media all and (min-width: 400px) { | ||
|  | 		.nav-right .share-btn { | ||
|  | 			display: inline-block; | ||
|  | 		} | ||
|  | 		.nav-right .small-share-btn { | ||
|  | 			display: none; | ||
|  | 		} | ||
|  | 	} | ||
|  | </style> | ||
|  | </head> | ||
|  | 
 | ||
|  | <body> | ||
|  | 
 | ||
|  | <div class="container root page-server_file_url_format"> | ||
|  | 
 | ||
|  | <div class="header"> | ||
|  | 	<a class="forkme" href="https://github.com/laurent22/joplin"><img src="https://joplinapp.org/images/ForkMe.png"/></a> | ||
|  | 	<a href="https://joplinapp.org"><h1 class="title"><img class="title-icon" src="https://joplinapp.org/images/Icon512.png"><span class="title-text">Joplin</span></h1></a> | ||
|  | 	<p class="sub-title">An open source note taking and to-do application with synchronisation capabilities</p> | ||
|  | </div> | ||
|  | 
 | ||
|  | <div class="nav-wrapper"> | ||
|  | 	<div class="nav"> | ||
|  | 		<ul> | ||
|  | 			<li class=""><a href="https://joplinapp.org/" title="Home"><i class="fa fa-home"></i></a></li> | ||
|  | 			<li><a href="https://discourse.joplinapp.org" title="Forum">Forum</a></li> | ||
|  | 			<li><a class="gsoc" href="https://joplinapp.org/gsoc2021/index/" title="Google Summer of Code 2021">GSoC 2021</a></li> | ||
|  | 		</ul> | ||
|  | 		<div class="nav-right"> | ||
|  | 			<iframe class="share-btn share-btn-github" src="https://ghbtns.com/github-btn.html?user=laurent22&repo=joplin&type=star&count=true" frameborder="0" scrolling="0" width="115px" height="20px"></iframe> | ||
|  | 		</div> | ||
|  | 	</div> | ||
|  | </div> | ||
|  | 
 | ||
|  | <div class="content"> | ||
|  | 	<div id="toc"><ul> | ||
|  | <li> | ||
|  | <p>Applications</p> | ||
|  | <ul> | ||
|  | <li><a href="https://joplinapp.org/desktop/">Desktop application</a></li> | ||
|  | <li><a href="https://joplinapp.org/mobile/">Mobile applications</a></li> | ||
|  | <li><a href="https://joplinapp.org/terminal/">Terminal application</a></li> | ||
|  | <li><a href="https://joplinapp.org/clipper/">Web Clipper</a></li> | ||
|  | </ul> | ||
|  | </li> | ||
|  | <li> | ||
|  | <p>Support</p> | ||
|  | <ul> | ||
|  | <li><a href="https://discourse.joplinapp.org">Joplin Forum</a></li> | ||
|  | <li><a href="https://joplinapp.org/markdown/">Markdown Guide</a></li> | ||
|  | <li><a href="https://joplinapp.org/e2ee/">How to enable end-to-end encryption</a></li> | ||
|  | <li><a href="https://joplinapp.org/conflict/">What is a conflict?</a></li> | ||
|  | <li><a href="https://joplinapp.org/debugging/">How to enable debug mode</a></li> | ||
|  | <li><a href="https://joplinapp.org/rich_text_editor/">About the Rich Text editor limitations</a></li> | ||
|  | <li><a href="https://joplinapp.org/faq/">FAQ</a></li> | ||
|  | </ul> | ||
|  | </li> | ||
|  | <li> | ||
|  | <p>Joplin API - Get Started</p> | ||
|  | <ul> | ||
|  | <li><a href="https://joplinapp.org/api/overview/">Joplin API Overview</a></li> | ||
|  | <li><a href="https://joplinapp.org/api/get_started/plugins/">Plugin development</a></li> | ||
|  | <li><a href="https://joplinapp.org/api/tutorials/toc_plugin/">Plugin tutorial</a></li> | ||
|  | </ul> | ||
|  | </li> | ||
|  | <li> | ||
|  | <p>Joplin API - References</p> | ||
|  | <ul> | ||
|  | <li><a href="https://joplinapp.org/api/references/plugin_api/classes/joplin.html">Plugin API</a></li> | ||
|  | <li><a href="https://joplinapp.org/api/references/rest_api/">Data API</a></li> | ||
|  | <li><a href="https://joplinapp.org/api/references/plugin_manifest/">Plugin manifest</a></li> | ||
|  | <li><a href="https://joplinapp.org/api/references/plugin_loading_rules/">Plugin loading rules</a></li> | ||
|  | <li><a href="https://joplinapp.org/api/references/plugin_theming/">Plugin theming</a></li> | ||
|  | </ul> | ||
|  | </li> | ||
|  | <li> | ||
|  | <p>Development</p> | ||
|  | <ul> | ||
|  | <li><a href="https://github.com/laurent22/joplin/blob/dev/BUILD.md">How to build the apps</a></li> | ||
|  | <li><a href="https://joplinapp.org/spec/e2ee/">End-to-end encryption spec</a></li> | ||
|  | <li><a href="https://joplinapp.org/spec/history/">Note History spec</a></li> | ||
|  | <li><a href="https://joplinapp.org/spec/sync_lock/">Sync Lock spec</a></li> | ||
|  | <li><a href="https://joplinapp.org/spec/plugins/">Plugin Architecture spec</a></li> | ||
|  | <li><a href="https://joplinapp.org/spec/search_sorting/">Search Sorting spec</a></li> | ||
|  | <li><a href="https://joplinapp.org/spec/server_file_url_format/">Server: File URL Format</a></li> | ||
|  | <li><a href="https://joplinapp.org/spec/server_delta_sync/">Server: Delta Sync</a></li> | ||
|  | <li><a href="https://joplinapp.org/spec/server_sharing/">Server: Sharing</a></li> | ||
|  | </ul> | ||
|  | </li> | ||
|  | <li> | ||
|  | <p>Google Summer of Code 2021</p> | ||
|  | <ul> | ||
|  | <li><a href="https://joplinapp.org/gsoc2021/index/">Google Summer of Code 2021</a></li> | ||
|  | <li><a href="https://joplinapp.org/gsoc2021/pull_request_guidelines/">How to submit a GSoC pull request</a></li> | ||
|  | <li><a href="https://joplinapp.org/gsoc2021/ideas/">Project Ideas</a></li> | ||
|  | </ul> | ||
|  | </li> | ||
|  | <li> | ||
|  | <p>About</p> | ||
|  | <ul> | ||
|  | <li><a href="https://joplinapp.org/changelog/">Changelog (Desktop App)</a></li> | ||
|  | <li><a href="https://joplinapp.org/changelog_cli/">Changelog (CLI App)</a></li> | ||
|  | <li><a href="https://joplinapp.org/changelog_server/">Changelog (Server)</a></li> | ||
|  | <li><a href="https://joplinapp.org/stats/">Stats</a></li> | ||
|  | <li><a href="https://joplinapp.org/donate/">Donate</a></li> | ||
|  | </ul> | ||
|  | </li> | ||
|  | </ul> | ||
|  | </div> | ||
|  | 
 | ||
|  | 	<div class="main"> | ||
|  | <p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=E8JMYD2LQ8MMA&lc=GB&item_name=Joplin+Development&currency_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted"><img src="https://joplinapp.org/images/badges/Donate-PayPal-green.svg" alt="Donate using PayPal"></a> <a href="https://github.com/sponsors/laurent22/"><img src="https://joplinapp.org/images/badges/GitHub-Badge.svg" alt="Sponsor on GitHub"></a> <a href="https://www.patreon.com/joplin"><img src="https://joplinapp.org/images/badges/Patreon-Badge.svg" alt="Become a patron"></a> <a href="https://joplinapp.org/donate/#donations"><img src="https://joplinapp.org/images/badges/Donate-IBAN.svg" alt="Donate using IBAN"></a></p> | ||
|  | <hr> | ||
|  | <h1>Structure of file URLs in Joplin Server<a name="structure-of-file-urls-in-joplin-server" href="#structure-of-file-urls-in-joplin-server" class="heading-anchor">🔗</a></h1> | ||
|  | <p>To identify a file, Joplin Server supports two types of URLs:</p> | ||
|  | <h2>Access by ID<a name="access-by-id" href="#access-by-id" class="heading-anchor">🔗</a></h2> | ||
|  | <p><strong>Format:</strong> <code>BASE_URL/files/FILE_ID</code></p> | ||
|  | <p>This is the simplest way and it matches how other API items are accessed by ID.</p> | ||
|  | <p>For example: <code>https://example.com/api/files/5c7e0f3f54434ba</code></p> | ||
|  | <h2>Access by full path<a name="access-by-full-path" href="#access-by-full-path" class="heading-anchor">🔗</a></h2> | ||
|  | <p><strong>Format:</strong> <code>BASE_URL/files/SPECIAL_DIR:/path/to/file/:</code></p> | ||
|  | <p>This is to access a file by its full path. In this case, the path must be prefixed by <code>SPECIAL_DIR</code>, which can only be <code>root</code> at the moment. Then to differentiate the path from URL segments, it needs to be wrapped in colons <code>:</code>.</p> | ||
|  | <p>For example, to access the metadata of file <code>/my/file.txt</code></p> | ||
|  | <p><code>https://example.com/api/files/root:/my/file.txt:</code></p> | ||
|  | <p>To access its content:</p> | ||
|  | <p><code>https://example.com/api/files/root:/my/file.txt:/content</code></p> | ||
|  | <p>To access the root only (for example to list its content):</p> | ||
|  | <p><code>https://example.com/api/files/root:/:</code></p> | ||
|  | <p>Which can also be written as:</p> | ||
|  | <p><code>https://example.com/api/files/root</code></p> | ||
|  | <h2>Difference between API and web app end points<a name="difference-between-api-and-web-app-end-points" href="#difference-between-api-and-web-app-end-points" class="heading-anchor">🔗</a></h2> | ||
|  | <p>The API and web app end points are consistent in the way they access files, except that in one case the URLs will start with <code>/api</code> and the other with just <code>/</code>. For example, this would access the same file:</p> | ||
|  | <ul> | ||
|  | <li>API: <code>https://example.com/api/files/root:/my/file.txt:</code></li> | ||
|  | <li>Web: <code>https://example.com/files/root:/my/file.txt:</code></li> | ||
|  | </ul> | ||
|  | 
 | ||
|  | 		<div class="bottom-links"> | ||
|  | 			<a href="https://github.com/laurent22/joplin/blob/dev/readme/spec/server_file_url_format.md"> | ||
|  | 				<i class="fa fa-github"></i> Improve this doc | ||
|  | 			</a> | ||
|  | 		</div> | ||
|  | <script> | ||
|  | 	function stickyHeader() {  | ||
|  | 		return; // Disabled | ||
|  | 
 | ||
|  | 		if ($(window).scrollTop() > 179) { | ||
|  | 			$('.nav').addClass('sticky');  | ||
|  | 		} else { | ||
|  | 			$('.nav').removeClass('sticky'); | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	$(window).scroll(function() { | ||
|  | 		stickyHeader(); | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ | ||
|  | 	(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), | ||
|  | 	m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) | ||
|  | 	})(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); | ||
|  | 	ga('create', 'UA-103586105-1', 'auto'); | ||
|  | 	ga('send', 'pageview'); | ||
|  | </script> | ||
|  | 
 | ||
|  | </div></div> | ||
|  | 
 | ||
|  | <div class="footer"> | ||
|  | Copyright (C) 2016-2021 Laurent Cozic | ||
|  | </div> | ||
|  | </body> | ||
|  | </html> |