O tamanho do arquivo é 0 ao recriar o arquivo do URI ou o caminho do arquivo original [getExternalFilesDir (tipo de seqüência de caracteres) vs getFilesDir ()]
Um pouco do primeiro plano de fundo: esse aplicativo tira uma foto e faz o upload para um armazenamento de blobs do Azure.
A imagem é armazenada em um arquivo (armazenamento interno) usandogetApplicationContext().getFilesDir();
Para fazer upload, preciso chamar a função uploadFromFile (..) da seguinte forma:CloudBlockBlob.uploadFromFile(String path);
A função uploadFromFile do SDK do Azure tem a seguinte aparência:
public void uploadFromFile(final String path) throws StorageException, IOException {
uploadFromFile(path, null /* accessCondition */, null /* options */, null /* opContext */);
}
public void uploadFromFile(final String path, final AccessCondition accessCondition, BlobRequestOptions options,
OperationContext opContext) throws StorageException, IOException {
File file = new File(path);
long fileLength = file.length();
InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
this.upload(inputStream, fileLength, accessCondition, options, opContext);
inputStream.close();
}
O problema está em jogolong fileLength = file.length();
onde o fileLength é 0.
Eu testei isso contra o usoEnvironment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
para o diretório de armazenamento. Isso funciona.
Preciso usar o armazenamento interno vs o armazenamento externo, pois isso é especificamente necessário para este projeto.
EDIT: O AndroidArquivo A documentação não menciona nada sobre esse comportamento. Suponho que isso possa ter algo a ver com o uso do armazenamento interno do aplicativo.
EDIT: Adicionando algum código
Estou enviando umArquivo mPhotoFile para a intenção da minha câmera. Isso conterá a foto. mPhotoFileUri contém o URI para este arquivo. A seguir está o código para usar o caminho do arquivo.
File file = new File(mPhotoFile.getPath()); // value -> /data/user/0/com.example.devpactapp/files/JPEG_20160209_234929_1936823724.jpg
boolean fileExists = file.exists(); // true
long fileLength = file.length(); // length 0
A seguir, está o código para obter o arquivo do URI.
File file = new File(mPhotoFileUri.getPath()); // value -> /data/user/0/com.example.devpactapp/files/JPEG_20160209_235534_-1059496729.jpg
boolean fileExists = file.exists(); // true
long fileLength = file.length(); // length 0
Eu tenho que passar o caminho desse arquivo para ouploadFromFile função.
Solução mencionada na minha 'resposta'.