首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过okhttp3上传文件

通过okhttp3上传文件
EN

Stack Overflow用户
提问于 2017-02-09 23:19:12
回答 1查看 1.5K关注 0票数 0

在选择了image、doc或pdf之后,我想通过okhttp3传递它们,我该怎么做呢?

代码语言:javascript
复制
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    if(resultCode==RESULT_OK && requestCode==0){
        Log.d("uri data",""+data.getData());

        selectedFileUri = data.getData();
        fileToBeUploaded = new File(""+selectedFileUri);
        fileName = fileToBeUploaded.getName();
        Log.d("filename",""+fileName);

在okhttp 3中

代码语言:javascript
复制
RequestBody formBody = new MultipartBody.Builder()
                    .setType(MultipartBody.FORM)
                    .addFormDataPart("data[User][user_picture]", fileToBeUploaded.getName(),RequestBody.create(MediaType.parse("*/*"), fileToBeUploaded))

显示的错误是

代码语言:javascript
复制
java.io.FileNotFoundException: content:/com.android.providers.media.documents/document/image%3A40227: open failed: ENOENT (No such file or directory)

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-10 20:59:56

所以我自己回答这个问题。

所以我首先打开一个临时文件的输出流。

代码语言:javascript
复制
imageTempUploadfile=new File(Environment.getExternalStorageDirectory()+"/inpaint/");
if(!imageTempUploadfile.exists())
    imageTempUploadfile.mkdirs();
    imageTempUploadfile2 = new File(Environment.getExternalStorageDirectory() + "/inpaint/"+"file"+".docx");
OutputStream outputTempFileStream = new FileOutputStream(imageTempUploadfile2);

该扩展依赖于mime type.You可以通过以下方式找到mime类型

代码语言:javascript
复制
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    if(resultCode==RESULT_OK && requestCode==0){
        Log.d("uri data",""+data.getData());

        String mimetype = context.getContentResolver().getType(data.getData());

        selectedFileUri = data.getData();

现在从文件中读取并将其内容写入临时文件

代码语言:javascript
复制
selectedFileInputStream = getContentResolver().openInputStream(selectedFileUri);

现在将该文件写入

代码语言:javascript
复制
try {
    try {
        byte[] buffer = new byte[4 * 1024]; // or other buffer size
        int read;

        while ((read = selectedFileInputStream.read(buffer)) != -1) {
            outputTempFileStream.write(buffer, 0, read);
        }
        outputTempFileStream.flush();
    } finally {
        outputTempFileStream.close();
    }
} catch (Exception e) {
    e.printStackTrace(); // handle exception, define IOException and others
}

最后

代码语言:javascript
复制
MultipartUtility multipart = new MultipartUtility(urlLeaveFormApply, charset);
multipart.addFilePart("data[User][user_picture]", imageTempUploadfile2);

在成功后的最后

代码语言:javascript
复制
imageTempUploadfile2.delete();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42140447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档