阿里云OSS 上传文件

阿里云后台管理、API 集成教程、Key/ 域名的查询

1、查看上传的文件在哪?

a 、百度阿里云,进入官网。然后进入管理控制台

b、左侧菜单栏,进入对象存储 OSS

c、进入 Bucket 管理页面,点击创建的bucket 名称

d、进入bucket 管理界面,点击左侧菜单

bucket属性 菜单查看bucket 域名

object 管理  查看管理上传的文件

图片处理   查看图片域名地址

2、查看accessKey  和 screctKey

3、集成 OSS  sdk下载地址和API  地址

https://help.aliyun.com/document_detail/oss/sdk/android-sdk/preface.html?spm=5176.docoss/api-reference/abstract.6.302.9Lrnuz

Android 实现上传图片

1、下载sdk    https://help.aliyun.com/document_detail/oss/sdk/android-sdk/preface.html?spm=5176.docoss/sdk/android-sdk/get-start.6.302.WewVmT

  • 解压后得到 jar 包,目前包括 aliyun-oss-sdk-android-2.2.0.jar、okhttp-3.2.0.jar 和 okio-1.6.0.jar
  • 将以上 3 个 jar 包导入 libs 目录

2、在android manifest中增加权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

3、初始化 OSS client

可以建个 application  在 application中初始化,记得修改android
manifest 中 application  name

4、实现上传功能

代码:

application:

package com.tan.uploadtooss;

import com.alibaba.sdk.android.oss.ClientConfiguration;
import com.alibaba.sdk.android.oss.OSS;
import com.alibaba.sdk.android.oss.OSSClient;
import com.alibaba.sdk.android.oss.common.OSSLog;
import com.alibaba.sdk.android.oss.common.auth.OSSCredentialProvider;
import com.alibaba.sdk.android.oss.common.auth.OSSPlainTextAKSKCredentialProvider;
import android.app.Application;
import android.app.usage.NetworkStats.Bucket;

public class MainApplication extends Application {

	//OSS的Bucket
	public static final String OSS_BUCKET = Bucket名称;
	//设置OSS数据中心域名或者cname域名
	public static final String OSS_BUCKET_HOST_ID = 域名,不包含bucket;
	//Key
	private static final String accessKey = accessKey;
	private static final String screctKey = screctKey;

	public static OSS oss;
	@Override
	public void onCreate() {
		super.onCreate();
		//初始化OSS配置
		initOSSConfig();
	}

	private void initOSSConfig(){
        OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider(accessKey, screctKey);

        ClientConfiguration conf = new ClientConfiguration();
        conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒
        conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
        conf.setMaxConcurrentRequest(5); // 最大并发请求书,默认5个
        conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
        if(BuildConfig.DEBUG){
        	OSSLog.enableLog();
        }
        oss = new OSSClient(getApplicationContext(), MainApplication.OSS_BUCKET_HOST_ID, credentialProvider, conf);
	}

}

activity:

package com.tan.uploadtooss;

import java.text.SimpleDateFormat;
import java.util.Date;
import com.alibaba.sdk.android.oss.ClientException;
import com.alibaba.sdk.android.oss.ServiceException;
import com.alibaba.sdk.android.oss.callback.OSSCompletedCallback;
import com.alibaba.sdk.android.oss.callback.OSSProgressCallback;
import com.alibaba.sdk.android.oss.model.PutObjectRequest;
import com.alibaba.sdk.android.oss.model.PutObjectResult;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

	private String mUploadFilePath = "/storage/emulated/0/DCIM/Camera/IMG_20150701_104558.jpg";
	private Button vCommit;

	protected Handler mHandler = new Handler();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		vCommit = (Button) findViewById(R.id.btn_commit);
		vCommit.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				uploadData( mUploadFilePath);
			}
		});
	}

	/**
	 * 上传图片
	 * @param imageByte
	 */
	private void uploadData(String uploadFilePath){
		mHandler.post(new Runnable() {
			@Override
			public void run() {
				//显示个等待页面
			}
		});

		PutObjectRequest put = new PutObjectRequest(MainApplication.OSS_BUCKET, "image/albums/"+getImageObjectKey("123456789"), uploadFilePath);

		put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
			@Override
			public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
				 Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
			}
		});

		MainApplication.oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
			@Override
			public void onSuccess(final PutObjectRequest request, PutObjectResult result) {
				Log.d("PutObject", "UploadSuccess");
	            Log.d("ETag", result.getETag());
	            Log.d("RequestId", result.getRequestId());
	            //将上传成功的图片地址传给自己的服务器后台,比如修改用户数据库中,用户头像的url。
	            //修改后台url成功后,再利用glide 下载最新的照片,修改本地头像图片。
	            //request.getObjectKey() 是图片地址,但是不包含,OSS 图片域名
//	            uploadImage(request.getObjectKey());
			}

			@Override
			public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
					mHandler.post(new Runnable() {
						@Override
						public void run() {
							//如果上传失败了,通过mHandler ,发出失败的消息到主线程中。处理异常。
//							showNetErrorInfo();
						}
					});
				       // 请求异常
	               if (clientExcepion != null) {
	                   // 本地异常如网络异常等
	                   clientExcepion.printStackTrace();
	               }
	               if (serviceException != null) {
	                    // 服务异常
	                   Log.e("ErrorCode", serviceException.getErrorCode());
	                   Log.e("RequestId", serviceException.getRequestId());
	                   Log.e("HostId", serviceException.getHostId());
	                   Log.e("RawMessage", serviceException.getRawMessage());
	               }

			}
		});

	}

	//通过UserCode 加上日期组装 OSS路径
	private String getImageObjectKey (String strUserCode){

    	Date date = new Date();
    	return new SimpleDateFormat("yyyy/M/d").format(date)+"/"+strUserCode+new SimpleDateFormat("yyyyMMddssSSS").format(date)+".jpg";

	}

}
//将上传成功的图片地址传给自己的服务器后台,比如修改用户数据库中,用户头像的url。
//修改后台url成功后,再利用glide 下载最新的照片,修改本地头像图片。
//request.getObjectKey() 是图片地址,但是不包含,OSS 图片域名

实现代码:

/**
	 * 上传图片地址到接口后台
	 * @param string
	 */
	protected void uploadImage(final String faceImg) {
		String url = HttpHelper.HTTP_URL+HttpHelper.UserUrl.MODIFY_MEMBER;
		Map<String, String> map = new HashMap<String, String>();
		map.put("faceImg", faceImg);
		Map<String, String> params = new HashMap<String, String>();
		params = Utils.getParams(map, mContext);

		StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
			@Override
			public void onResponse(String response) {
				System.out.println("response:"+response);
				ParseDataHandler<BaseResponseData> parseDataHandler = new ParseDataHandler<BaseResponseData>(mHandler,response);
				parseDataHandler.setParseDataCallBack(new ParseDataCallBack<BaseResponseData>() {

					@Override
					public BaseResponseData executeParseData(String data) {
						BaseResponseData result = JsonUtil.toObject(data, BaseResponseData.class);
						return result;
					}

					@Override
					public void onResult(BaseResponseData t) {
						dimissMaterialLoadDialog();
						if(HttpHelper.HttpStatus.SUCCESS_CODE.equals(t.getCode())){
							showToast(R.string.label_upload_success);
//							ComeBackHomeReceiver.sendComeBackHome(mContext);
							Glide.with(mContext).load(HttpHelper.OSS_IMAGE_HOST+faceImg)
				            .centerCrop()
				            .placeholder(R.drawable.ic_me)
				            .error(R.drawable.ic_me)
				            .into(vRoundImg);
							System.out.println();
							mUserInfo.setFaceImg(HttpHelper.OSS_IMAGE_HOST+faceImg);
							mainApplication.getFinalDB().update(mUserInfo);
						}else{
							if(HttpHelper.HttpStatus.LOGIN_CONFICT_EXIT.equals(t.getCode())){
								mainApplication.clearDB();
								ShoppingCartNumChangeReceiver.sendCartNumChanged(mContext, 0);
								String msg = t.getMsg();
								if(!TextUtils.isEmpty(msg) && msg.trim().length() > 0){
									showToast(msg);
								}
								Intent intent = new Intent(mContext,HomeActivity.class);
								intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
								intent.putExtra("module", "Login");
								startActivity(intent);
							}
						}
					}
				});
				parseDataHandler.start();
			}
		}, new Response.ErrorListener() {
			@Override
			public void onErrorResponse(VolleyError error) {
				dimissMaterialLoadDialog();
				showNetErrorInfo();
			}
		});
		request.setHttpHeader(Utils.getHttpHeader(mContext,mUserInfo.getToken()));
		request.setParams(params);
		request.setTag(TAG);
		queue.add(request);
	}

manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tan.uploadtooss"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="23" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:name="com.tan.uploadtooss.MainApplication"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

layout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.tan.uploadtooss.MainActivity" >

    <Button
        android:id="@+id/btn_commit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="上传" />

</RelativeLayout>

源码地址:

http://download.csdn.net/detail/legend12300/9488326

时间: 2025-01-02 19:08:49

阿里云OSS 上传文件的相关文章

阿里云OSS上传文件模块

1 package com.hughes.bcsc.app.core.util.oss; 2 3 import java.io.ByteArrayInputStream; 4 import java.io.ByteArrayOutputStream; 5 import java.io.File; 6 import java.io.FileInputStream; 7 import java.io.FileNotFoundException; 8 import java.io.IOExceptio

使用阿里云OSS上传文件

本文介绍如何利用Java API操作阿里云OSS对象存储. 1.控制台操作 首先介绍一下阿里云OSS对象存储的一些基本概念. 1.1 进入对象存储界面 登录阿里云账号,进入对象存储界面,如图所示. 进入后如图所示. 1.2 OSS基本概念 这里不过多介绍如何在阿里云上传下载文件,这些操作基本上点一点都能找到. 1.2.1 Bucket Bucket实质就是阿里云OSS对象存储的一个存储空间,按照计算机理解的话可以理解为一个磁盘(不知道这样比喻是否恰当). 创建桶的过程很简单,如图所示,填写对应内

阿里云OSS上传文件本地调试跨域问题解决

问题描述: 最近后台说为了提高上传效率,要前端直接上传文件到阿里云,而不经过后台.因为在阿里云服务器设置的允许源(region)为某个固定的域名下的源(例如*.cheche.com),直接在本地访问会有跨域问题. 解决方案: 在本机C:\Windows\System32\drivers\etc的hosts文件中(使用管理员身份打开并编辑)添加一行地址映射:127.0.0.1 test.cheche.com 然后把前端运行项目的端口改为80,以vue项目为例(config/index.js) 到这

阿里云oss上传文件

方法一 使用 web interface 上传 方法二 使用 oss browser 官方客户端软件上传,支持桌面操作系统,首次打开时输入 appid 和 secret 登陆,预设 oss 路径为 oss://oef,地域选深圳. 登陆后可上传文件. 方法三 使用 oss util 官方命令行工具上传,可以通过 cron 定时任务实现定期上传.备份等. 首先下载 ossutil64 这个可执行文件(不同系统名字可能不一样),使用方法为首先创建配置文件(修改id 和 secret): cat <<

【记录】java 阿里云OSS上传文件

参考地址:http://www.macrozheng.com/#/architect/mall_arch_10?id=oss 参考地址:https://help.aliyun.com/document_detail/31927.html 参考地址:https://help.aliyun.com/document_detail/91868.html 原文地址:https://www.cnblogs.com/wbl001/p/12301504.html

阿里云服务器上传文件失败

最近一直在学习WEB方面的内容,自己做了一个练习站,也没了个阿里云服务作为测试,过程中遇到了不少情况! 首先,由于我用的是ThinkPHP框架,遇到的第一个大麻烦便是上传的内容不能显示在界面上,提示有关于runtime的问题,同时,当我需要上传更多的文件时出现了偶尔成功但大多失败的情况,flashFXP提示553Could not create file.招了好多资料都没有看到什么好的建议或者解决办法,只是明确了问题的根本在于文件的权限.根据好心人提示修改目录权限,我干脆直接把整个目录文件的权限

Qt客户端阿里云服上传文件

整体原理: 阿里云提供了c程序上传文件到阿里云服务器的sdk工具包,将这个工具包继承在自己的客户端,调用接口即可实现上传文件. 前期准备: 1.阿里云c程序客户端的sdk,下载地址:https://help.aliyun.com/document_detail/32131.html?spm=5176.doc32139.6.768.JIh6Dh (如果地址不对,可以在阿里云的帮助文档中找) 2.安装vs2010或以上版本,目的是为了编译生成oss_c_sdk.lib静态链接库 操作步骤: 1.将下

项目总结56:阿里云OSS上传的图片被自动旋转问题解决

问题:上传图片到阿里云OSS,再再HTML标签使用OSS图片路径,展示的图片被自动旋转了:但是将图片图片路径直接浏览器打开,是原始没有旋转过的: 解决方案: 阿里云文档已经说明了解决方案,链接:https://help.aliyun.com/document_detail/44691.html?spm=a2c4g.11186623.6.1160.1c5d149dByJ2yu 原因是某些手机拍摄出来的照片可能带有旋转参数(存放在照片exif信息里面),img处理图片是会识别这个旋转参数 即在URL

如何获取阿里云OSS上每个文件夹的大小

原文 https://help.aliyun.com/document_detail/88458.html?spm=a2c4g.11186623.2.11.792462b15oU02q OSS文件按照字母顺序排列.Python SDK提供了一系列列举文件及获取指定目录下文件大小的方法. 简单列举 以下代码用于列举指定存储空间下的10个文件: # -*- coding: utf-8 -*- import oss2 from itertools import islice # 阿里云主账号Acces