java - 上传到 FTP 服务器时 PDF 文件损坏且大小增加 | 安卓工作室 | 爪哇
问题描述
当我将 pdf 文件上传到 Windows 服务器时,它在从 FileZilla 下载时被损坏。文件大小也以字节为单位增加。某些文件已损坏或某些文件只有一半内容。
任何帮助或代码将不胜感激。谢谢!
单击以从手机目录中选择文件:
btnSelectFile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("application/pdf");
startActivityForResult(Intent.createChooser(intent, "Select PDF File"), 21);
}
});
关于活动结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 21:
if (resultCode == RESULT_OK) {
// Get the Uri of the selected file
uri = data.getData();
uriString = uri.toString();
myFile = new File(uriString);
path = myFile.getAbsolutePath();
displayName = null;
file1 = Uri.fromFile(new File(path));
if (uriString.startsWith("content://")) {
Cursor cursor = null;
try {
cursor = getActivity().getContentResolver().query(uri, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
textFileSelectedOrNot.setText(displayName);
fileName = textFileSelectedOrNot.getText().toString();
}
} finally {
cursor.close();
}
} else if (uriString.startsWith("file://")) {
displayName = myFile.getName();
textFileSelectedOrNot.setText(displayName);
fileName = textFileSelectedOrNot.getText().toString();
}
}
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
在服务器上创建目录并上传文件:
class CreateDir extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
String server = "XX.XXX.X.XX";
String username = "XXXXXXX";
String password = "XXXXX";
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(server, 2102);
ftpClient.login(username, password);
ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
Log.d(TAG, "CONNECTED");
String dirPath = "/ws.gajeratrust.org/TestingApp/" + fileId + "/";
boolean created = ftpClient.makeDirectory(dirPath);
FTPUtils.mkdir(ftpClient, dirPath);
InputStream inputStream =getContentResolver().openInputStream(uri);
ftpClient.storeFile(dirPath+"/"+fileName,inputStream);
inputStream.close();
ftpClient.logout();
ftpClient.disconnect();
Log.d(TAG, "DISCONNECTED");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
请检查代码是否有任何更改或我编码错误的内容,请发表评论。
解决方案
InputStream inputStream = new FileInputStream(file);
将其替换为
InputStream inputStream = getContentResolver().openInputStream(data.getData());
您可以丢弃所有乱用 File 和 Cursor 实例的代码。
我也想知道我引用的那一行之前的那四行应该做什么。
推荐阅读
- optimization - BARON ERROR:在 Julia 中使用 JuMP 时无法打开 nl 文件
- awk - awk 命令意外换行符或字符串结尾
- asp.net-core - 如果我的站点将使用 Web api 进行后端工作,那么“Asp.Net Core 托管”Blazor WebAssembly 服务器站点可以提供什么功能?
- javascript - 是否可以将jpg图像转换为bmp?
- python - rasa.core.agent - 由于找不到模块“rasa.nlu.classifiers.fallback_classifier”而无法加载模型
- wordpress - Nginx 加载资源失败:服务器对 png 文件响应状态为 404()
- docker - MinIO STS:无法获取临时凭证
- ruby-on-rails - Ruby:通过时间戳循环并跳回循环 - 优化
- loops - Roblox:我怎样才能让这个脚本正常工作?
- java - 为什么在项目上设置文本后我的项目导航抽屉的字体会发生变化?