我在将位图流写入 WCF DataOutputStream 请求时遇到了一个奇怪的问题。我正进入(状态:
IOException: 预期字节 XXX 但收到 XXX
我已经使用 FileInputStream 对其进行了测试,并且可以完美上传,但是当我将位图转换为 InputStream 时,它会抛出一个IOException
. 任何帮助将不胜感激。
下面是我调用 AsyncTask 的函数:
public static Boolean AddAdItemImage(int AdItemId,File ThisFile)
{
HttpURLConnection conn = null;
DataOutputStream dos = null;
DataInputStream inStream = null;
InputStream fileInputStream = null;
ByteArrayOutputStream stream = null;
try
{
if (ThisFile.isFile())
{
Bitmap Bm = Utility.decodeSampledBitmapFromResource(ThisFile.getPath(), 640, 480);
stream = new ByteArrayOutputStream();
Bm.compress(CompressFormat.JPEG, 100, stream);
fileInputStream = new ByteArrayInputStream(stream.toByteArray());
//fileInputStream = new FileInputStream(ThisFile);
conn = (HttpURLConnection) new URL(Params.GetServiceUrl()+"/AddAdImage?AdItemId="+String.valueOf(AdItemId)+"&ContentType="+Utility.GetFileMimeType(ThisFile)+"&apikey="+Params.GetApiKey()).openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setFixedLengthStreamingMode((int) ThisFile.length());// works fine till 24 mb file
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type","application/stream");
dos = new DataOutputStream(conn.getOutputStream());
int maxBufferSize = 1 * 1024 * 1024;
int bytesAvailable = fileInputStream.available();
int bufferSize = Math.min(bytesAvailable,maxBufferSize);
byte[] buffer = new byte[bufferSize];
Log.i("Upload Ad Image", "Writing Stream");
while ((bufferSize = fileInputStream.read(buffer)) > 0)
{
dos.write(buffer, 0, bufferSize);
}
Log.i("Upload Ad Image", "Stream Written");
//dos.write(stream.toByteArray());
String lineEnd = "";
dos.writeBytes(lineEnd);
Log.i("Upload Ad Image", "Line Written");
// read the SERVER RESPONSE
inStream = new DataInputStream(conn.getInputStream());
String str = new String();
String strResponse = new String();
while ((str = inStream.readLine()) != null)
{
strResponse += str;
}
inStream.close();
dos.flush();
dos.close();
return Boolean.valueOf(strResponse);
}
}
catch (MalformedURLException ex)
{
Log.e("AddAdItemImage", "MalformedURLException: " + ex.getMessage(),ex);
}
catch (IOException ioe)
{
Log.e("AddAdItemImage", "IOException: " + ioe.getMessage(),ioe);
}
catch (IllegalStateException e)
{
Log.e("AddAdItemImage", "IllegalStateException: " + e.getMessage(),e);
}
catch (Exception e)
{
Log.e("AddAdItemImage", "Exception: " + e.getMessage(),e);
}
finally
{
try
{
if(fileInputStream != null)
fileInputStream.close();
}
catch (IOException e){}
try
{
if(stream!=null)
stream.close();
}
catch (IOException e) {}
}
return false;
}