Android上传图片到服务器的代码怎么写(Android客户端代码和服务端代码)

第一点:Android端代码先引入权限

//网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
//相册权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

第二点:Android端在build.gradle里面引入依赖注入

//ok_go的依赖
//必须使用
compile 'com.lzy.net:okgo:3.0.4'

第三点:建立一个将uri转成url的类

public class Utils {

    /**
     * 这个是将跳转到相册返回的uri转换成写文件或者读成文件的url的,就是new Fileurl)时候,不能使用uri
     *
     * @param context 上下文对象
     * @param uri     当我们跳转到相册时候给我们返回来的地址,例如 content://media/external/images/media/124238
     * @return data 返回一个字符串,这个字符串就是真实的地址
     */
    public static String getRealFilePath(final Context context, final Uri uri) {
        if (null == uri) return null;
        final String scheme = uri.getScheme();
        String data = null;
        if (scheme == null)
            data = uri.getPath();
        else if (ContentResolver.SCHEME_FILE.equals(scheme)) {
            data = uri.getPath();
        } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
            Cursor cursor = context.getContentResolver().query(uri, new String[]{MediaStore.Images.ImageColumns.DATA}, null, null, null);
            if (null != cursor) {
                if (cursor.moveToFirst()) {
                    int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
                    if (index > -1) {
                        data = cursor.getString(index);
                    }
                }
                cursor.close();
            }
        }
        return data;
    }
}

第四点:随便你定义一个按钮button进行提交图片使用匿名内部类的方式进行上传图片的方法

//真正的提交
addProjectLL.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
            OkGo.<String>post(BASE_HOSE + "/pic/upload")//
                    .tag(this)//
                    .isMultipart(true)
                    .params("uploadFile", new File(realFilePath))
                    .execute(new StringCallback() {
                        @Override
                        public void onSuccess(Response<String> response) {
                            Toast.makeText(getActivity(), response.body().toString(), Toast.LENGTH_SHORT).show();
                        }
                    });
        }
    
});

第五点:服务端的代码首先要有多媒体解析,所以要在Spring的配置文件中配置多媒体解析器


<!-- 配置多媒体解析器 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设定默认编码 -->
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 设定文件上传的最大值5MB,5*1024*1024 -->
<property name="maxUploadSize" value="5242880"></property>
</bean>


第六点:服务器端Web层的代码编写

@Controller
public class PicturController {
@Value("${IMAGE_SERVER_URL}")
private String IMAGE_SERVER_URL;


@Autowired
private HttpServletRequest request;


@RequestMapping("/pic/upload")
@ResponseBody
public Map uploadFile(MultipartFile uploadFile) {


// 把图片上传到图片服务器,
try {
FastDFSClient fastDFSClient = new FastDFSClient(
"classpath:conf/client.conf");


String originalFilename = uploadFile.getOriginalFilename();
String extName = originalFilename.substring(originalFilename
.lastIndexOf(".") + 1);


// 取文件扩展名
String url = fastDFSClient.uploadFile(uploadFile.getBytes(),
extName);


url = IMAGE_SERVER_URL + url;
System.out.println(url);


Map result = new HashMap<>();
result.put("error", 0);
result.put("url", url);
return result;


} catch (Exception e) {
e.printStackTrace();
Map result = new HashMap<>();
result.put("error", 1);
result.put("message", "图片上传失败");
return result;
}
}
}

Android端代码地址https://github.com/lovepaul/e3mall_m.git
















猜你喜欢

转载自blog.csdn.net/lovePaul77/article/details/77650037