• 使用OBS的C版本SDK如何获取bucket的区域
    请教:使用C版本的SDK,该如何获取存储桶的区域信息?查看了C#、Java和Go版本的帮助文档,都提供了类似于getBucketLocation的API,但是在C语言版本的SDK中没有找到类似的API。
  • [互动交流] 业务涉及敏感数据,不上传到OBS,如何使用DLI?
    RT
  • [互动交流] obs downloadFile 分段下载文件
    log.error("第" + downCount + "次下载文件"+ sourcePath + "失败:获取从OBS服务端返回的错误码:" + e.getErrorCode() );log.error("第" + downCount + "次下载文件"+ sourcePath + "失败:获取OBS服务端返回的HTTP状态码:" + e.getResponseCode() );log.error("第" + downCount + "次下载文件"+ sourcePath + "失败:获取OBS服务端返回的HTTP响应描述" + e.getResponseStatus() );log.error("第" + downCount + "次下载文件"+ sourcePath + "失败:获取OBS服务端返回的详细错误码标识:" + e.getErrorIndicator() );第1次下载文件失败:获取从OBS服务端返回的错误码:null第1次下载文件失败:获取OBS服务端返回的HTTP状态码:-1第1次下载文件失败:获取OBS服务端返回的HTTP响应描述null第1次下载文件失败:获取OBS服务端返回的详细错误码标识:null请问为什么下载同一个对象。会频繁失败。有时成功有时失败。DownloadFileRequest request = new DownloadFileRequest(bucketName, sourcePath);// 设置下载对象的本地文件路径request.setDownloadFile(targetPath);// 设置分段下载时的最大并发数request.setTaskNum(5);// 设置分段大小为500MBrequest.setPartSize(500 * 1024 * 1024);// 开启断点续传模式request.setEnableCheckpoint(true);ProgressListener progressListener = progressStatus -> { String info = "pull file " + sourcePath + " AverageSpeed: " + progressStatus.getTransferPercentage(); log.info(info);};request.setProgressListener(progressListener);// 每上传100MB数据反馈下载进度request.setProgressInterval(100 * 1024 * 1024);request.setCheckpointFile("");client.downloadFile(request);
  • [问题求助] 【ABC产品】【图片上传功能】配置OBS后图片上传报没权限
    【功能模块】配置OBS后图片上传报没权限,对象'Connector'中不存在记录'default', 或者用户无权操作该记录【操作步骤&问题现象】1、配置OBS,使用平台提供的OBS上传文件,在桶处测试上传文件成功;2、使用图片上传组件,选择OBS,仍然报错,对象'Connector'中不存在记录'default', 或者用户无权操作该记录【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【ABC平台】【批量导出导入】如果没有OBS是否还能使用批量导出功能
    1.经过测试  批量导出功能跟OBS有关 ,当我们把所有的OBS换成一个无效地址后 表格导出无法使用但是目前我们项目客户没有准备OBS (他们使用的内网NFS,线下部署的cube) 那么线下还有其他方案使用ABC平台的批量导出功能吗2.NFS由于客户要求我们需要自己用java写一套上传下载的接口部署jar包到客户内网虚拟机中,那么请问roma 接口是否可以选择文件类型参数?如果可以,脚本里面如何接收?(ABC平台可以选multipart/form-data  但是脚本里面如何接收呢?)
  • [技术干货] 华为云 OBS 文件图片上传下载代码
    package com.vulcan.controller.attachment; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.ObsObject; import com.vulcan.base.BaseController; import com.vulcan.common.util.oss.OBSClient; import com.vulcan.common.util.oss.OSSClientUtil; import com.vulcan.common.util.result.Result; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import sun.misc.BASE64Decoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; /** * @描述:上传下载 * @创建时间:2019年04月16日 * @Copyright @2019 by lzh */ @Controller @RequestMapping("/web/attachment") @Slf4j public class Attachment extends BaseController { @Autowired OSSClientUtil ossClientUtil; /** * 5M */ private static final int MAX_POST_SIZE = 5 * 1024 * 1024; /** * 100M */ private static final int MAX_POST_SIZE_FILE = 100 * 1024 * 1024; public static synchronized String getOrder() { return DateFormatUtils.format(new Date(), "yyyyMMddHHmmssSSS") + RandomStringUtils.randomNumeric(6); } /** * 上传图片 * * @param file * @return */ @ResponseBody @RequestMapping(value = "/upload", method = RequestMethod.POST) public Result springUploadFile(MultipartFile file) { String fileName = null; try { if (file.isEmpty()) { return new Result(false, "1", "图片不存在"); } else { //如果上传图片大于5M不予上传 if (file.getSize() > MAX_POST_SIZE) { return new Result(false, "1", "上传图片不能大于5M"); } fileName = file.getOriginalFilename(); boolean isFile = StringUtils.endsWithAny(StringUtils.lowerCase(fileName), new String[]{".png", ".jpg", ".jpeg", ".bmp", ".gif"}); if (isFile) { InputStream inputStream =null; inputStream = file.getInputStream(); return new Result(true,"https://"+ OBSClient.getUrl(RandomStringUtils.random(16, "0123456789"), inputStream),0); // Object address = ossClientUtil.putObject(path, file); } else { return new Result(false, "1", "图片格式不正确"); } } } catch (Exception e) { e.printStackTrace(); return new Result(false, "1", "上传失败"); } } /** * 上传 * * @param file * @return */ @ResponseBody @RequestMapping(value = "/uploadFile", method = RequestMethod.POST) public Result uploadFile(MultipartFile file) { String fileName = null; try { if (file.isEmpty()) { return new Result(false, "1", "请选择图片/文件"); } else { fileName = file.getOriginalFilename(); String[] imgSuffix = {"jpg", "png", "bmp", "jpeg"}; String[] fileSuffix = {"doc", "docx", "pdf", "rar", "zip", "ppt", "xls", "xlsx","pptx"}; //String[] suffix = {"jpg", "png", "bmp", "jpeg", "doc", "docx", "pdf", "rar", "zip", "ppt", "xls", "xlsx"}; boolean isImage = StringUtils.endsWithAny(StringUtils.lowerCase(fileName), imgSuffix); boolean flag = false; Byte type = 0; if (isImage) { //如果上传图片大于5M不予上传 if (file.getSize() > MAX_POST_SIZE) { return new Result(false, "1", "上传图片不能大于5M"); } flag = true; } else { boolean isFile = StringUtils.endsWithAny(StringUtils.lowerCase(fileName), fileSuffix); if (isFile) { if (file.getSize() > MAX_POST_SIZE_FILE) { return new Result(false, "1", "上传文件不能大于100M"); } type = 1; flag = true; } } if (flag) { InputStream inputStream =null; inputStream = file.getInputStream(); String address = OBSClient.getUrl(RandomStringUtils.random(16, "0123456789"),inputStream); JSONObject jsonObject = new JSONObject(); jsonObject.put("type",type); jsonObject.put("url","https://"+address); jsonObject.put("name",fileName); log.info("上传返回值,jsonObject={}", JSON.toJSONString(jsonObject)); return new Result(true, "000","操作成功",jsonObject,0); } else { return new Result(false, "1", "格式不正确"); } } } catch (Exception e) { e.printStackTrace(); return new Result(false, "1", "上传失败"); } } /* public void OssAction(HttpServletRequest request, HttpServletResponse response) throws IOException { String endPoint = "obs.cn-north-1.myhuaweicloud.com"; String ak = "JRDWOVPEKTPCZRYKZCSP"; String sk = "9QCJHq5AL9Meo67pua0NXaMeWg6IjWq6xNPELgdf"; // 创建ObsClient实例 final ObsClient obsClient = new ObsClient(ak, sk, endPoint); ObsObject obsObject = obsClient.getObject("obs-ticket", "objectname"); // 读取对象内容 log.info("Object content:{}",obsObject); InputStream input = obsObject.getObjectContent(); byte[] b = new byte[1024]; ByteArrayOutputStream bos = new ByteArrayOutputStream(); int len; while ((len=input.read(b)) != -1){ bos.write(b, 0, len); } System.out.println(new String(bos.toByteArray())); bos.close(); input.close(); }*/ /** * 文件下载 * @param request * @param response * @param obsKey */ @RequestMapping(value = "/download", method = RequestMethod.GET) public void OssAction(HttpServletRequest request, HttpServletResponse response,String obsKey){ try { String fileName="fapiao.pdf"; String endPoint = "你的endpoint"; String ak = "你的ak"; String sk = "你的sk"; // 创建ObsClient实例 final ObsClient obsClient = new ObsClient(ak, sk, endPoint); ObsObject obsObject = obsClient.getObject("obs-ticket", obsKey.substring(52)); // 已缓冲的方式从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取 BufferedReader reader = new BufferedReader(new InputStreamReader(obsObject.getObjectContent())); InputStream inputStream = obsObject.getObjectContent(); //缓冲文件输出流 BufferedOutputStream outputStream=new BufferedOutputStream(response.getOutputStream()); //通知浏览器以附件形式下载 // response.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8")); // 为防止 文件名出现乱码 response.setContentType("application/doc"); final String userAgent = request.getHeader("USER-AGENT"); if(StringUtils.contains(userAgent, "MSIE")){//IE浏览器 fileName = URLEncoder.encode(fileName,"UTF-8"); }else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器 fileName = new String(fileName.getBytes(), "ISO8859-1"); }else{ fileName = URLEncoder.encode(fileName,"UTF-8");//其他浏览器 } response.addHeader("Content-Disposition", "attachment;filename=" +fileName);//这里设置一下让浏览器弹出下载提示框,而不是直接在浏览器中打开 //进行解码 如果上传时为了防止乱码 进行解码使用此方法 /*BASE64Decoder base64Decoder = new BASE64Decoder(); byte[] car; while (true) { String line = reader.readLine(); if (line == null) break; car = base64Decoder.decodeBuffer(line); outputStream.write(car); } reader.close();*/ byte[] car = new byte[1024]; int L; while((L = inputStream.read(car)) != -1){ if (car.length!=0){ outputStream.write(car, 0,L); } } if(outputStream!=null){ outputStream.flush(); outputStream.close(); } } catch (IOException e) { e.printStackTrace(); log.error("e:{}",e.getMessage()); } catch (ObsException e){ e.printStackTrace(); log.error("e:{}",e.getMessage()); } } }————————————————
  • [问题求助] 【沃土AppCube】【obs连接器】配置连接器后,测试无法上传文件
    问题描述:在华为云购买了obs后,然后再沃土平台的appcube配置obs连接器,配置完成后,点击测试上传,提示错误 配置信息:1. 访问密钥用:下载的(Access Key Id);2.秘钥用:下载的(Secret Access Key);3.账号地区和桶地区:用了创建桶的地区; 以上信息在使用obs官网的下载的客户端进行连接是正常的,能正常上下传文件; 我在华为云控制台查看:obs地址为:obs.lz04.cn-south-1.myhuaweicloud.com 而报错信息中的obs地址为:baiot01.obs.cn-south-1.myhwclouds.com 后面的域名有区别,不知道是否因为这个原因 报错信息如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202106/07/1134336pmeezpbxjs0o7zv.png) 在华为云的obs截图: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202106/07/113536ap4ak7nwbfh9j8gp.png) 在沃土appcube截图: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202106/07/113614ucq4u23atyopjtwr.png)
  • [互动交流] OBS Browser+ 华为云账号登录认证失败
    已确认账号名与密码正确(网页版华为云使用账号名密码登录成功)查看日志显示:user clearwho login failed, since get user token by password from iam failed, err:undefined
  • [项目实践] 【免费试用实践任务2-从OBS导入数据到集群】免费试用的小伙伴,快来完成实践任务,做任务提建议,积分赢奖品啦~
    教程指引:https://support.huaweicloud.com/bestpractice-dws/dws_05_0025.html实践介绍:      本教程旨在通过演示将样例数据上传OBS,及将OBS的数据导入进GaussDB(DWS)上的目标表中,让您快速掌握如何从OBS导入数据到GaussDB(DWS)集群的完整过程。在本教程中,您将:•生成CSV格式的数据文件。•创建一个OBS存储桶,然后将数据文件上传到该存储桶。•创建外表,用于引流OBS存储桶中的数据到GaussDB(DWS)集群。•启动GaussDB(DWS)并创建数据库表后,将OBS上的数据导入到表中。•根据错误表中的提示诊断加载错误并更正这些错误。估计时间:30分钟。实践步骤:步骤 1:上传数据到 OBS步骤 2:创建外表步骤 3:执行数据导入步骤 4:分析和处理错误表中的错误信息步骤 5:优化导入数据的查询性能步骤 6:清除资源课程反馈:场景分析:问题记录:如果你也想申请GaussDB(DWS)免费试用,请点此一键申请免费试用>>3500元套餐,我就免费,哎,就是玩儿~
  • [互动交流] OBS 的服务地址是什么
    是这个吗 cn-north-4a还是这个https://obs.cn-north-4.myhuaweicloud.com
  • obs上传图片到桶怎么获取带签名的url在浏览器中可以直接打开访问
    obs上传图片到桶怎么获取带签名的url在浏览器中可以直接打开访问
  • 请问 obs python sdk 是否支持并行文件系统的修改对象功能
    官网资料里边 JAVA 和 C 实现的 SDK 中有提到修改对象功能的实现,Python 的未发现,请问是否有支持计划
  • [互动交流] 需要在OBS结束后操作一些东西,如何知道OBS是否传输完毕呢
    需要在OBS结束后操作一些东西,如何知道OBS是否传输完毕呢
  • [互动交流] OBS如何生成处理后图片的临时授权访问url?
    CreateTemporarySignatureRequest 有设置处理图片的属性或方法吗?
  • [运维管理] 【DWS】【导入导出】OBS外表特殊字符处理有欠缺
    【功能模块】【操作步骤&问题现象】1、https://support.huaweicloud.com/dws_faq/dws_03_0018.html 是这么说的:OBS外表支持CSV格式文件,或者文本类型的其他格式文件,二者主要不同如下:CSV由记录组成,每条记录被分隔符分隔为字段,且每条记录都有同样的字段序列。可以有效处理数据列中的换行符,但对一些特殊字符处理有欠缺。TEXT可以有效处理一些特殊字符,但无法正确处理数据列中的换行符。2、在最佳实践的三个业务实践中(交通卡口,供应链、百货公司),外表都是使用CSV格式(OPTIONS设置 format 'csv')那“对一些特殊字符处理有欠缺”,该如何理解呢?具体有哪些特殊字符?具体是什么欠缺?会导致导入失败吗?因为外表里有近10亿条数据,导入失败回滚会比较麻烦吧?比较费时间吧?那为了避免这个欠缺的发生,导入前准备的外表文件,是不是要做一下数据的规范性检查?【截图信息】【日志信息】(可选,上传日志内容或者附件)
总条数:1487 到第
上滑加载中