Модуль
react-s3-uploader-multipart
нельзя использовать без каких-либо изменений в его исходном коде.
Видите ли, ошибка, зарегистрированная в консоли, возникает в результате назначения объекта на Строка 63 файла s3Upload.js
var evaporateOptions = Object.assign(this.evaporateOptions, {
signerUrl: this.signingUrl
});
Причина, по которой это происходит, заключается в том, что когда S3Upload
вызывается в строке 65 файла ReactS3Upload.js , он не пересылает свойство evaporateOptions
, которое необходимо установить при создании ReactS3Uploader
React Элемент.
this.myUploader = new S3Upload({
fileElement: ReactDOM.findDOMNode(this),
signingUrl: this.props.signingUrl,
getSignedUrl: this.props.getSignedUrl,
preprocess: this.props.preprocess,
onProgress: this.props.onProgress,
onFinishS3Put: this.props.onFinish,
onError: this.props.onError,
signingUrlMethod: this.props.signingUrlMethod,
signingUrlHeaders: this.props.signingUrlHeaders,
signingUrlQueryParams: this.props.signingUrlQueryParams,
signingUrlWithCredentials: this.props.signingUrlWithCredentials,
uploadRequestHeaders: this.props.uploadRequestHeaders,
contentDisposition: this.props.contentDisposition,
server: this.props.server,
scrubFilename: this.props.scrubFilename,
s3path: this.props.s3path,
evaporateOptions: this.props.evaporateOptions // this is missing
});
Также в Строка 68 и Строка 103 из s3upload.js
, this.s3Path
равна undefined
, скорее доступ к свойству в этих строках должен быть this.s3path
Это дает вам возможность сделать форк репозитория, сделать это изменение и сделать запрос на извлечение для его слияния с апстримом и развертывания в реестре npm.
или ищите в реестре пакетов npm другой файл.
Если вы сделаете это изменение, тогда steamrateOptions должны быть переданы как реквизиты. , например
import crypto from 'crypto';
const config = {
signerUrl: 'auth_upload',
aws_key: 'AKALN0L7ASDFLKJH',
bucket: 'my-big-bucket',
computeContentMd5: true,
cryptoHexEncodedHash256: data => crypto.createHash('sha256').update(data).digest('hex'),
cryptoMd5Method: data => crypto.createHash('md5').update(data).digest('base64')
};
<ReactS3Uploader
accept="image/*"
s3path="uploads/"
signingUrlWithCredentials={true}
uploadRequestHeaders={{ 'x-amz-acl': 'public-read' }}
contentDisposition="auto"
server="<backend-svc>"
inputRef={ref => (this.uploadInput = ref)}
evaporateOptions={config}
/>
Кроме того, конечная точка в резервной службе должна быть реализована для подписания URL-адреса загрузки S3.
См. /sign
экспресс-маршрут , чтобы получить пример того, как это реализовано.