MCPcopy Create free account
hub / github.com/cloudreve/cloudreve / Url

Method Url

service/admin/file.go:312–359  ·  view source on GitHub ↗
(c *gin.Context)

Source from the content-addressed store, hash-verified

310}
311
312func (s *SingleFileService) Url(c *gin.Context) (string, error) {
313 dep := dependency.FromContext(c)
314 fileClient := dep.FileClient()
315
316 ctx := context.WithValue(c, inventory.LoadFileEntity{}, true)
317 file, err := fileClient.GetByID(ctx, s.ID)
318 if err != nil {
319 return "", serializer.NewError(serializer.CodeDBError, "Failed to get file", err)
320 }
321
322 // find primary entity
323 var primaryEntity *ent.Entity
324 for _, entity := range file.Edges.Entities {
325 if entity.Type == int(types.EntityTypeVersion) && entity.ID == file.PrimaryEntity {
326 primaryEntity = entity
327 break
328 }
329 }
330
331 if primaryEntity == nil {
332 return "", serializer.NewError(serializer.CodeNotFound, "Primary entity not exist", nil)
333 }
334
335 // find policy
336 policy, err := dep.StoragePolicyClient().GetPolicyByID(ctx, primaryEntity.StoragePolicyEntities)
337 if err != nil {
338 return "", serializer.NewError(serializer.CodeDBError, "Failed to get policy", err)
339 }
340
341 m := manager.NewFileManager(dep, inventory.UserFromContext(c))
342 defer m.Recycle()
343
344 driver, err := m.GetStorageDriver(ctx, policy)
345 if err != nil {
346 return "", serializer.NewError(serializer.CodeInternalSetting, "Failed to get storage driver", err)
347 }
348
349 es := entitysource.NewEntitySource(fs.NewEntity(primaryEntity), driver, policy, dep.GeneralAuth(),
350 dep.SettingProvider(), dep.HashIDEncoder(), dep.RequestClient(), dep.Logger(), dep.ConfigProvider(), dep.MimeDetector(ctx), dep.EncryptorFactory(ctx))
351
352 expire := time.Now().Add(time.Hour * 1)
353 url, err := es.Url(ctx, entitysource.WithExpire(&expire), entitysource.WithDisplayName(file.Name))
354 if err != nil {
355 return "", serializer.NewError(serializer.CodeInternalSetting, "Failed to get url", err)
356 }
357
358 return url.Url, nil
359}
360
361type (
362 BatchFileService struct {

Callers

nothing calls this directly

Calls 15

RecycleMethod · 0.95
UrlMethod · 0.95
FromContextFunction · 0.92
NewErrorFunction · 0.92
NewFileManagerFunction · 0.92
UserFromContextFunction · 0.92
NewEntitySourceFunction · 0.92
NewEntityFunction · 0.92
WithExpireFunction · 0.92
WithDisplayNameFunction · 0.92
FileClientMethod · 0.65
GetByIDMethod · 0.65

Tested by

no test coverage detected