# LocalStorage

Local file storage (presigned URLs)

## PUT /public/dms-presigned/{id}/upload/{uploadToken}/part/{partNumber}/file

>

```json
{"openapi":"3.1.0","info":{"title":"OpenAPI definition","version":"2026.14.3"},"tags":[{"name":"LocalStorage","description":"Local file storage (presigned URLs)"}],"servers":[{"url":"http://localhost:52177/api","description":"Generated server url"}],"paths":{"/public/dms-presigned/{id}/upload/{uploadToken}/part/{partNumber}/file":{"put":{"tags":["LocalStorage"],"operationId":"uploadFileTransferPart","parameters":[{"name":"id","in":"path","description":"shelf-document-id","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"uploadToken","in":"path","description":"uploadToken","required":true,"schema":{"type":"string"}},{"name":"partNumber","in":"path","description":"unique part number","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"token","in":"query","description":"token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/*":{"schema":{}}}}}}}}}
```

## GET /public/dms-presigned/{id}/download

>

```json
{"openapi":"3.1.0","info":{"title":"OpenAPI definition","version":"2026.14.3"},"tags":[{"name":"LocalStorage","description":"Local file storage (presigned URLs)"}],"servers":[{"url":"http://localhost:52177/api","description":"Generated server url"}],"paths":{"/public/dms-presigned/{id}/download":{"get":{"tags":["LocalStorage"],"operationId":"downloadFile","parameters":[{"name":"id","in":"path","description":"shelf-document-id","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"storageHandle","in":"query","description":"storageHandle","required":true,"schema":{"type":"string"}},{"name":"token","in":"query","description":"token","required":true,"schema":{"type":"string"}},{"name":"disposition","in":"query","description":"disposition","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Response contains File","content":{"application/*":{"schema":{}}}},"201":{"description":"Response with download-url","content":{"application/*":{"schema":{}}}},"303":{"description":"Location attribute contains alternate download location","content":{"application/*":{"schema":{}}}},"422":{"description":"Resource was not valid to process","content":{"application/*":{"schema":{"$ref":"#/components/schemas/core-error-ApiError"}}}}}}}},"components":{"schemas":{"core-error-ApiError":{"properties":{"instance":{"type":"string","description":"the resource that produced the error","readOnly":true},"trackingId":{"type":"string","description":"Internal tracking number for this Error","readOnly":true},"timeOfOccurence":{"type":"string","format":"date-time","description":"Internal timestamp, when this error happened","readOnly":true},"errors":{"$ref":"#/components/schemas/core-error-ApiError.Errors"},"decisions":{"type":"array","description":"all decisions, we need to take care of","items":{"$ref":"#/components/schemas/core-error-ApiErrorDecision"},"readOnly":true,"uniqueItems":true},"httpStatus":{"type":"integer","format":"int32","description":"HTTP-Status code"},"debug-info-url":{"type":"string","format":"uri","description":"optional url to get a more detailed stack trace","readOnly":true}},"required":["decisions","errors","instance","timeOfOccurence","trackingId"]},"core-error-ApiError.Errors":{"description":"all occured errors","properties":{"fieldErrors":{"type":"object","additionalProperties":{"type":"array","description":"One or more validation errors","items":{"$ref":"#/components/schemas/core-error-ApiErrorDetail"},"readOnly":true,"uniqueItems":true},"description":"One or more validation errors","readOnly":true},"services":{"type":"array","description":"One or more generel service errors","items":{"$ref":"#/components/schemas/core-error-ApiErrorDetail"},"readOnly":true,"uniqueItems":true}},"readOnly":true,"required":["fieldErrors","services"]},"core-error-ApiErrorDetail":{"description":"One or more generel service errors","properties":{"message":{"$ref":"#/components/schemas/core-api-LocalizeableMessage"},"property":{"type":"string","description":"property that has a constraint violation  (optional)"}},"readOnly":true},"core-api-LocalizeableMessage":{"description":"localizeable message","properties":{"messageCode":{"type":"string","description":"Internal unique identifier/key for this message"},"messageParameters":{"type":"object","additionalProperties":{"type":"object","description":"list of parameters to fill a formattable message"},"description":"list of parameters to fill a formattable message"},"formattedMessage":{"type":"string","description":"formatted message (default language)"}}},"core-error-ApiErrorDecision":{"description":"all decisions, we need to take care of","properties":{"message":{"$ref":"#/components/schemas/core-api-LocalizeableMessage"},"title":{"$ref":"#/components/schemas/core-api-LocalizeableMessage"},"multipleAnswersAllowed":{"type":"boolean","default":false,"description":"true, if an array of answers is required","readOnly":true},"textInput":{"type":"boolean","default":false,"description":"true, if text input instead of decisions is required","readOnly":true},"options":{"type":"array","description":"possible options for this decision","items":{"$ref":"#/components/schemas/core-error-ApiErrorDecision.DecisionOption"},"readOnly":true},"answerProperty":{"type":"string","description":"property to fill the decision into","readOnly":true},"answerPropertyType":{"type":"string","description":"type of the target property","enum":["FIELD","PARAMETER"],"readOnly":true},"searchDialog":{"$ref":"#/components/schemas/unknownservice-unknownmodule-JsonNode"}},"readOnly":true},"core-error-ApiErrorDecision.DecisionOption":{"description":"possible options for this decision","properties":{"message":{"$ref":"#/components/schemas/core-api-LocalizeableMessage"},"value":{"type":"string","description":"value for this decision","readOnly":true},"defaultOption":{"type":"boolean","default":false,"description":"default option","readOnly":true},"searchDialogs":{"type":"array","description":"Zu verwendende Search-Dialogs","items":{"$ref":"#/components/schemas/core-error-ApiErrorDecision.DecisionOptionSearchDialog"},"readOnly":true}}},"core-error-ApiErrorDecision.DecisionOptionSearchDialog":{"description":"Zu verwendende Search-Dialogs","properties":{"dialog":{"$ref":"#/components/schemas/unknownservice-unknownmodule-JsonNode"},"answerKey":{"type":"string","description":"Schlüssel für das Ergebnis vom Search-Dialog","readOnly":true}}},"unknownservice-unknownmodule-JsonNode":{"description":"Search-Dialog"}}}}
```
