如何通过HTTP从Sanity下载文件?

问题描述

我想知道是否可以通过HTTP请求从Sanity下载文件

我只有参考ID:

<a href="https://cdn.sanity.io/assets/clientID/dataset/file-xxxxxxxxxxx-xlsx"> 
Download File 
</a>

在这种情况下,我想这样做:

{{1}}

解决方法

您确实可以?只需一点自定义代码,就可以从_ref(它是文件文档的_id

)进行操作。

从文件的_ref / _id创建URL

_ref / _id结构类似于:file-{ID}-{EXTENSION}(例如:file-207fd9951e759130053d37cf0a558ffe84ddd1c9-mp3)。

由此,您可以生成具有以下结构的可下载URL:https://cdn.sanity.io/files/{PROJECT_ID}/{DATASET}/{ID_OF_FILE}.{EXTENSION}。这是该操作的一些伪Javascript代码:

const getUrlFromId = ref => {
  // Example ref: file-207fd9951e759130053d37cf0a558ffe84ddd1c9-mp3
  // We don't need the first part,unless we're using the same function for files and images
  const [_file,id,extension] = ref.split('-');
  return `https://cdn.sanity.io/files/${PROJECT_ID}/${DATASET}/${id}.${extension}`
}

直接查询URL

但是,如果您可以使用GROQ查询文件的文档,那会更加容易:

*[(YOUR FILTER HERE)] {
  file->{ url } // gets the URL from the referenced file
}

您也可以对图像进行同样的操作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...