【发布时间】:2017-10-06 11:38:11
【问题描述】:
我有如下文件上传功能:
public void uploadFile(Context context, File file) {
String urlServer = "https://u-database.000webhostapp.com/recieve_file.php";
if(file.isFile() && file.exists()) {
String fileName = file.getAbsolutePath();
try {
HttpURLConnection conn = null;
DataOutputStream dos = null;
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1 * 1024 * 1024;
Toast toastw = Toast.makeText(context, "Inside TRY", Toast.LENGTH_SHORT);
toastw.show();
FileInputStream fileInputStream = new FileInputStream(file);
URL url = new URL(urlServer);
// Open a HTTP connection to the URL
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true); // Allow Inputs
conn.setDoOutput(true); // Allow Outputs
conn.setUseCaches(false); // Don't use a Cached Copy
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("ENCTYPE", "multipart/form-data");
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
conn.setRequestProperty("textLog", fileName);
dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"textLog\";filename=\""+fileName+"\""+lineEnd);
dos.writeBytes(lineEnd);
// create a buffer of maximum size
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
// read file and write it into form...
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
// send multipart form data necesssary after file data...
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
// Responses from the server (code and message)
int serverResponseCode = conn.getResponseCode();
String serverResponseMessage = conn.getResponseMessage();
Toast toast = Toast.makeText(context, "Uploading", Toast.LENGTH_SHORT);
toast.show();
if(serverResponseCode == 200){
file.delete();
Toast toasto = Toast.makeText(context, "success", Toast.LENGTH_SHORT);
toasto.show();
}
fileInputStream.close();
dos.flush();
dos.close();
} catch (MalformedURLException ex) {
Toast toast = Toast.makeText(context, "Malformed URL", Toast.LENGTH_SHORT);
toast.show();
} catch (Exception e) {
Toast toast = Toast.makeText(context, "Exception", Toast.LENGTH_SHORT);
toast.show();
}
}
}
每次执行时,都会出现一个 toast 说明 Inside TRY,然后出现另一个说明“Exception”。
我已经调试了很多,任何形式的帮助都将不胜感激:)
更新
当我执行e.toString 并将其打印出来祝酒时,我得到:android.os.NetworkOnMainThreadException
【问题讨论】:
-
如果您查看
ex提供的内容(例如printStackTrace或类似的东西),它会告诉您更多信息 -
好吧,@ItamarGreen 感谢您的关注,它通常是 BroadCastReciver 的一部分,因此我无法在 AVD 中调试它,因为它没有任何活动。所以基本上它是没有希望的。你知道其他获取堆栈跟踪的方法吗?
-
嗯,要记录异常,可以参考这里:stackoverflow.com/questions/7841232/…
-
@ItamarGreen 在哪里?我没有看到那里的链接
-
你不能编辑代码并打印出异常的toString()吗?
标签: java android file-upload