unstable_createFileUploadHandler
一個 Node.js 上傳處理器,會將帶有檔案名稱的部分寫入磁碟以避免佔用記憶體,不帶檔案名稱的部分則不會被解析。應與另一個上傳處理器組合使用。
範例
export const action = async ({
request,
}: ActionFunctionArgs) => {
const uploadHandler = unstable_composeUploadHandlers(
unstable_createFileUploadHandler({
maxPartSize: 5_000_000,
file: ({ filename }) => filename,
}),
// parse everything else into memory
unstable_createMemoryUploadHandler()
);
const formData = await unstable_parseMultipartFormData(
request,
uploadHandler
);
const file = formData.get("avatar");
// file is a "NodeOnDiskFile" which implements the "File" API
// ... etc
};
選項
屬性 | 類型 | 預設值 | 描述 |
---|---|---|---|
avoidFileConflicts | 布林值 | true | 如果磁碟上已存在相同名稱的檔案,則在檔案名稱結尾附加時間戳記,以避免檔案衝突 |
directory | 字串 | 函式 | os.tmpdir() | 寫入上傳檔案的目錄。 |
file | 函式 | () => upload_${random}.${ext} |
目錄中檔案的名稱。可以是相對路徑,如果目錄結構不存在,將會被建立。 |
maxPartSize | 數字 | 3000000 | 允許的最大上傳大小(以位元組為單位)。如果超過此大小,將會拋出 MaxPartSizeExceededError 錯誤。 |
filter | 函式 | 選填 | 您可以編寫一個函式,根據檔案名稱、內容類型或欄位名稱來阻止儲存檔案上傳。返回 false 則會忽略該檔案。 |
file
和 directory
的函式 API 相同。它們都接受一個 object
並返回一個 string
。它們接受的物件具有 filename
、name
和 contentType
(都是字串)。返回的 string
是路徑。
filter
函式接受一個 object
並返回一個 boolean
(或解析為 boolean
的 promise)。它接受的物件具有 filename
、name
和 contentType
(都是字串)。如果想要處理該檔案串流,則返回的 boolean
為 true
。