javascript - 如何为网络文件传输格式化图像
问题描述
我正在尝试编写一个将图像从手机发送到 Amazon S3 存储桶的应用程序。目前我正在使用 png 文件测试应用程序。一切似乎都可以接受图像没有正确格式化以进行网络传输。我尝试了许多不同的东西,但我没有想法。
我正在像这样上传我的图片:
onChange = () => {
let newfile = this.refs.file.files[0];
let reader = new FileReader();
let url = reader.readAsDataURL(newfile);
reader.onloadend = () => {
this.setState({
...this.state,
openModal: true,
imgSrc : [reader.result],
imageType: newfile.type,
})
}
}
我知道这张图片上传有效,因为我可以显示我的图片
<img src={this.state.imgSrc} />
控制台记录 imgSrc 给了我一个持续 26,000 个字符的字符串"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASQAAAEjCAYAAACb/HxUAAAA..."
我正在向我的 Amazon S3 存储桶发出 put 请求,但无法显示图像!
var headers= {
'Content-Type': this.state.imageType,
};
return axios.put(signedUrl, this.state.imgSrc, {headers:headers})
当我控制台记录来自亚马逊的响应时,它看起来像这样。
{data: "", status: 200, statusText: "OK", headers: {…}, config: {…}, …}
config:
adapter: ƒ xhrAdapter(config)
data: "["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAS"
headers: {Accept: "application/json, text/plain, */*", Content-Type: "image/png"}
maxContentLength: -1
method: "put"
timeout: 0
transformRequest: {0: ƒ}
transformResponse: {0: ƒ}
url: "https://bucket.s3.us-east-2.amazonaws.com/1_1553270707390?Content-Type=image%2Fpng&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-
validateStatus: ƒ validateStatus(status)
xsrfCookieName: "XSRF-TOKEN"
xsrfHeaderName: "X-XSRF-TOKEN"
__proto__: Object
data: ""
headers: {}
request: XMLHttpRequest {onreadystatechange: ƒ, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, …}
status: 200
statusText: "OK"
__proto__: Object
解决方案
您应该发送实际文件(即newfile
),而不是data:
您将其转换为的 URL readAsDataURL
。
推荐阅读
- reactjs - 根据状态变量进行条件 Yup 验证
- python - 使用字典计算每个字母在单词中出现的次数
- python - 如何测试 Web 服务 URL 挂起?
- javascript - Async/Await 与 JQuery 文档 READY
- c# - 获取查询字符串后重写url或加密url
- c# - Blazor 绑定输入值在按钮单击时不起作用
- ibm-mobilefirst - 面对 MFP 控制台错误 FWLSE0325:运行时同步失败,如何从数据库中取消部署移动适配器
- python - BucketIterator.splits() 期间的“AttributeError”
- javascript - 在 JavaScript 中将函数声明为常量
- python - 将函数添加到 dict 类而不覆盖它