图像文件消失,未上传
Image File Disappears, Not Uploaded
我有一个创建文件的应用程序如下:
File image = File.createTempFile(
imageFileName, // prefix
".jpg", // suffix
storageDir // directory
);
在调用 image.exists() 之后 returns 正确。然后我将文件名作为额外数据发送到相机:
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photoFile));
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
我保存的文件路径是这样的:"file:/storage/emulated/0/Pictures/JPEG_20171211_162442_-1697405777.jpg"。当相机 activity 的结果 returns 时,我可以使用文件路径创建位图:
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(mCurrentPhotoPath));
我成功显示了位图,但是当我使用路径创建文件对象时,File.exists() returns 错误,尽管我可以使用 [=25= 查看文件].更重要的是,我无法使用 POST 调用将图像加载到服务器,它看起来像这样:
File sourceFile = new File(sourceImageFile);
String fileName = sourceFile.getName();
Log.d(Constants.TAG, "File...::::" + sourceFile + " : " + sourceFile.exists());
final MediaType MEDIA_TYPE = MediaType.parse("image/jpeg");
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("xxx_upload_file", fileName, RequestBody.create(MEDIA_TYPE, sourceFile))
.addFormDataPart("content", "upload_img")
.addFormDataPart("XXX_id", Constants.xxx_ID)
.addFormDataPart("session_id", mPicActivity.mSessionID)
.addFormDataPart("source_url", "Chatbot")
.build();
Request request = new Request.Builder()
.url(Constants.CHATBOT_URL_BASE + Constants.STORE_EXAMINE)
.post(requestBody)
.build();
mClient.newCall(request).enqueue(new Callback()...);
服务器响应其他调用,因此这不是连接问题或 URL 问题。上传失败是不是因为文件突然不存在了(尽管确实存在,如上所述)?问题是否与 "emulated" 文件路径有关。
保存临时文件时 Android 会在其名称中添加一些随机符号,例如 "youfilename.jpgXkd5jrj".
检查 File image
的确切文件 name/path 或在文件管理器中查看临时文件目录以查看文件是否确实存在。
"file:/storage/emulated/0/Pictures/JPEG_20171211_162442_-1697405777.jpg".
应该是
"/storage/emulated/0/Pictures/JPEG_20171211_162442_-1697405777.jpg".
我有一个创建文件的应用程序如下:
File image = File.createTempFile(
imageFileName, // prefix
".jpg", // suffix
storageDir // directory
);
在调用 image.exists() 之后 returns 正确。然后我将文件名作为额外数据发送到相机:
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photoFile));
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
我保存的文件路径是这样的:"file:/storage/emulated/0/Pictures/JPEG_20171211_162442_-1697405777.jpg"。当相机 activity 的结果 returns 时,我可以使用文件路径创建位图:
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(mCurrentPhotoPath));
我成功显示了位图,但是当我使用路径创建文件对象时,File.exists() returns 错误,尽管我可以使用 [=25= 查看文件].更重要的是,我无法使用 POST 调用将图像加载到服务器,它看起来像这样:
File sourceFile = new File(sourceImageFile);
String fileName = sourceFile.getName();
Log.d(Constants.TAG, "File...::::" + sourceFile + " : " + sourceFile.exists());
final MediaType MEDIA_TYPE = MediaType.parse("image/jpeg");
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("xxx_upload_file", fileName, RequestBody.create(MEDIA_TYPE, sourceFile))
.addFormDataPart("content", "upload_img")
.addFormDataPart("XXX_id", Constants.xxx_ID)
.addFormDataPart("session_id", mPicActivity.mSessionID)
.addFormDataPart("source_url", "Chatbot")
.build();
Request request = new Request.Builder()
.url(Constants.CHATBOT_URL_BASE + Constants.STORE_EXAMINE)
.post(requestBody)
.build();
mClient.newCall(request).enqueue(new Callback()...);
服务器响应其他调用,因此这不是连接问题或 URL 问题。上传失败是不是因为文件突然不存在了(尽管确实存在,如上所述)?问题是否与 "emulated" 文件路径有关。
保存临时文件时 Android 会在其名称中添加一些随机符号,例如 "youfilename.jpgXkd5jrj".
检查 File image
的确切文件 name/path 或在文件管理器中查看临时文件目录以查看文件是否确实存在。
"file:/storage/emulated/0/Pictures/JPEG_20171211_162442_-1697405777.jpg".
应该是
"/storage/emulated/0/Pictures/JPEG_20171211_162442_-1697405777.jpg".