根据阿里云提供的示例目前已经完成页面图片通过js上传至oss,但是只是在页面只有一个上传按钮的情况下,如果我的页面存在多个上传按钮来上传不同的图片,想问下使用js直传可以吗?(Java环境)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
当然可以使用JS直传的方式来处理页面上多个上传按钮的情况。每个上传按钮对应不同的文件上传逻辑,您可以通过为每个上传按钮绑定独立的事件处理器来实现这一需求。以下是基于您提及的Java环境和已有的JS直传实践,针对多上传按钮场景的一个解决方案概述:
为每个上传按钮分配唯一的ID,并且为对应的文件输入元素(如<input type="file">)也设置相应的ID,以便于在JavaScript中区分和操作。
<!-- 示例:两个上传按钮及对应的文件输入框 -->
<button id="uploadButton1">上传图片1</button>
<input type="file" id="fileInput1" style="display: none;">
<button id="uploadButton2">上传图片2</button>
<input type="file" id="fileInput2" style="display: none;">
为每个上传按钮编写独立的事件监听器,当按钮被点击时,触发相应文件输入框的选择文件对话框。一旦用户选择了文件,利用之前提到的签名URL进行直传。
document.getElementById('uploadButton1').addEventListener('click', function() {
document.getElementById('fileInput1').click();
});
document.getElementById('fileInput1').addEventListener('change', async function(event) {
const file = event.target.files[0];
if (file) {
// 这里调用获取签名URL的方法,示例中未直接给出此方法,请参考知识库资料自行实现或调用后端提供的接口
const signedUrl = await getSignedUrlForUpload('yourBucketName', 'path/to/image1');
uploadFile(file, signedUrl);
}
});
// 对第二个上传按钮重复上述过程
document.getElementById('uploadButton2').addEventListener('click', function() {
document.getElementById('fileInput2').click();
});
document.getElementById('fileInput2').addEventListener('change', async function(event) {
const file = event.target.files[0];
if (file) {
const signedUrl = await getSignedUrlForUpload('yourBucketName', 'path/to/image2');
uploadFile(file, signedUrl);
}
});
// 文件上传函数
async function uploadFile(file, signedUrl) {
const xhr = new XMLHttpRequest();
xhr.open('PUT', signedUrl, true);
xhr.setRequestHeader('Content-Type', file.type);
xhr.send(file);
}
通过以上步骤,您可以在一个页面上使用多个上传按钮,各自负责上传不同的图片至阿里云OSS,充分利用了JS直传的便利性。