我使用Android中的HttpsURLConnection类将文件上传到服务器。我正在使用PUT方法。在正常情况下它工作正常,但是当我试图将文件写入服务器中没有写权限的文件夹时,write方法应该失败然后当我使用getResponseCode()时我应该收到403 Forbidden来自服务器的响应。我必须使用403响应向用户显示“No Permissions”消息。
现在,当我上传的文件大小小于缓冲区大小(16K)时,write方法返回并且getResponseCode返回403.但是,当文件大小较大时(通常是这种情况),程序卡在write方法中,因此根本没有到达getResponseCode。包括模拟器在内的所有Android设备都会发生这种情况。
以下是代码段:
HttpsURLConnection connection = getSSLChannel();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setConnectTimeout(connectionTimeout);
connection.setReadTimeout(readTimeout);
connection.setUseCaches(false);
connection.setRequestMethod("PUT");
connection.setFixedLengthStreamingMode(size);
connection.setRequestProperty("Connection", "Keep-Alive");
OutputStream out = connection.getOutputStream();
try{
int count =0;
long progress = 0;
byte[] chunkData = new byte[16384];
long fileSize = localFile.getLocalFileSize();
bis = getSourceBufferedStream();
while (((nRead = bis.read(chunkData)) != -1)) {
if(nRead < chunkData.length){
byte[] newBytes = Arrays.copyOf(chunkData, nRead);
out.write(newBytes, 0, nRead);
count++;
}else{
out.write(chunkData, 0, nRead);
count++;
}
}
out.flush();
}finally{
if(out != null){
try {
out.close();
out = null;
} catch (IOException e) {
e.printStackTrace();
}
}
int resCode = connection.getResponseCode();
System.out.println("Res Code :" + resCode);
}
我在finally块中放了一个调试指针。但该应用程序永远不会进入finally块。
有些观点: 1.服务器不支持分段上传。 2.如果文件夹在服务器上具有写入权限,则没有单独的Web服务可以找到。 3.在iOS中这很好用。我能收到403。 我曾尝试过Fiddler,也给了我一个403。 5.此外,在快速网络中(如果服务器位于本地wifi域中),我有时可以获得403.
我做错了什么?请帮忙 !
感谢。