我只是四处闲逛,想办法把文件钉在皮纳塔身上。
虽然我有一种方法可以从服务器端执行此操作,但不知道如何从客户端(如React.js)这样做:
这是服务器端方法
async function storeImages(imagesFilePath) {
const fullImagesPath = path.resolve(imagesFilePath);
const files = fs.readdirSync(fullImagesPath);
let responses = [];
console.log("Uploading to Pinata !!!");
console.log("paths ", fs.createReadStream(fullImagesPath + "/" + files[0]));
for (fileIndex in files) {
const readableStreamForFile = fs.createReadStream(
`${fullImagesPath}/${files[fileIndex]}`
);
try {
const response = await pinata.pinFileToIPFS(readableStreamForFile);
responses.push(response);
} catch (error) {
console.log(error);
}
}
return { responses, files };
}
async function storeTokeUriMetadata(metadata) {
try {
const response = await pinata.pinJSONToIPFS(metadata);
return response;
} catch (error) {
console.log(error);
}
return null;
}
皮纳塔主页:带有一些手动上传文件的Pinata主页
非常感谢你的帮助
发布于 2022-11-13 02:59:25
我写了这个组件很久以前,希望它仍然有帮助!:)
import { useState } from "react"
import axios from "axios"
const FileUpload = () => {
const [selectedFile, setSelectedFile] = useState();
const changeHandler = (event) => {
setSelectedFile(event.target.files[0]);
};
const handleSubmission = async() => {
const formData = new FormData();
formData.append('file', selectedFile)
const metadata = JSON.stringify({
name: 'File name',
});
formData.append('pinataMetadata', metadata);
try{
const res = await axios.post("https://api.pinata.cloud/pinning/pinFileToIPFS", formData, {
maxBodyLength: "Infinity",
headers: {
'Content-Type': `multipart/form-data; boundary=${formData._boundary}`,
Authorization: `Bearer PASTE_YOUR_JWT_HERE`,
}
});
console.log(res.data);
} catch (error) {
console.log(error);
}
};
return (
<>
<label class="form-label">Choose File</label>
<input type="file" onChange={changeHandler}/>
<button onClick={handleSubmission}>Submit</button>
</>
)
}
export default FileUploadhttps://stackoverflow.com/questions/73518283
复制相似问题