在android中使用多部分格式json发送带有其他字符串的图像
我有这样的代码,我想上传图像和我的电话号码在服务器上。我有这样的代码在android中使用多部分格式json发送带有其他字符串的图像,android,eclipse,image-uploading,Android,Eclipse,Image Uploading,我有这样的代码,我想上传图像和我的电话号码在服务器上。我有这样的代码 protected void upload(){ Intent hasil = getIntent(); path = hasil.getStringExtra("pathimage"); mPhoneNumber = hasil.getStringExtra("phone"); String upLoadServerUri = Constants.u
protected void upload(){
Intent hasil = getIntent();
path = hasil.getStringExtra("pathimage");
mPhoneNumber = hasil.getStringExtra("phone");
String upLoadServerUri = Constants.url_create_product;
String fileName = path;
int serverResponseCode;
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;
File sourceFile = new File(path);
if (!sourceFile.isFile()) {
Log.e("uploadFile", "Source File Does not exist");
// return 0;
}
try { // open a URL connection to the Servlet
FileInputStream fileInputStream = new FileInputStream(sourceFile);
URL url = new URL(upLoadServerUri);
conn = (HttpURLConnection) url.openConnection(); // Open a HTTP connection to the URL
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("prod_image", fileName);
dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"prod_image\";filename=\""+ fileName + "\"" + lineEnd);
dos.writeBytes(lineEnd);
bytesAvailable = fileInputStream.available(); // create a buffer of maximum size
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 <span id="IL_AD8" class="IL_AD">file data</span>...
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
//kirim phone
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("phone", mPhoneNumber);
dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"phone\";filename=\""+ mPhoneNumber + "\"" + lineEnd);
dos.writeBytes(lineEnd);
bytesAvailable = fileInputStream.available(); // create a buffer of maximum size
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 <span id="IL_AD8" class="IL_AD">file data</span>...
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
// Responses from the server (code and message)
serverResponseCode = conn.getResponseCode();
String serverResponseMessage = conn.getResponseMessage();
Log.i("uploadFile", "HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode);
if(serverResponseCode == 200){
runOnUiThread(new Runnable() {
public void run() {
// tv.setText("<span id="IL_AD6" class="IL_AD">File Upload</span> Completed.");
Toast.makeText(Activity3.this, "File Upload Complete.", Toast.LENGTH_SHORT).show();
}
});
}
//close the streams //
fileInputStream.close();
dos.flush();
dos.close();
} catch (MalformedURLException ex) {
pDialog.dismiss();
ex.printStackTrace();
Toast.makeText(Activity3.this, "MalformedURLException", Toast.LENGTH_SHORT).show();
Log.e("Upload file to server", "error: " + ex.getMessage(), ex);
} catch (Exception e) {
pDialog.dismiss();
e.printStackTrace();
Toast.makeText(Activity3.this, "Exception : " + e.getMessage(), Toast.LENGTH_SHORT).show();
Log.e("Upload file to server Exception", "Exception : " + e.getMessage(), e);
}
pDialog.dismiss();
// return serverResponseCode;
}
}
受保护的无效上载(){
Intent hasil=getIntent();
path=hasil.getStringExtra(“路径图像”);
mPhoneNumber=hasil.getStringExtra(“电话”);
字符串upLoadServerUri=Constants.url\u create\u product;
字符串文件名=路径;
int服务器响应代码;
HttpURLConnection conn=null;
DataOutputStream dos=null;
字符串lineEnd=“\r\n”;
字符串双连字符=“--”;
字符串边界=“*******”;
int字节读取,字节可用,缓冲区大小;
字节[]缓冲区;
int maxBufferSize=1*1024*1024;
文件源文件=新文件(路径);
如果(!sourceFile.isFile()){
Log.e(“上传文件”,“源文件不存在”);
//返回0;
}
尝试{//打开到Servlet的URL连接
FileInputStream FileInputStream=新的FileInputStream(sourceFile);
URL URL=新URL(upLoadServerUri);
conn=(HttpURLConnection)url.openConnection();//打开到url的HTTP连接
conn.setDoInput(true);//允许输入
conn.setDoOutput(true);//允许输出
conn.setUseCaches(false);//不要使用缓存副本
conn.setRequestMethod(“POST”);
conn.setRequestProperty(“连接”、“保持活动”);
conn.setRequestProperty(“ENCTYPE”、“多部分/表单数据”);
conn.setRequestProperty(“内容类型”、“多部分/表单数据;边界=“+boundary”);
conn.setRequestProperty(“产品图像”,文件名);
dos=新的DataOutputStream(conn.getOutputStream());
写字节(两个连字符+边界+行结束);
writeBytes(“内容处理:表单数据;名称=\”产品图像\“文件名=\”+文件名+“\”+行结束”);
dos.writeBytes(lineEnd);
bytesAvailable=fileInputStream.available();//创建最大大小的缓冲区
bufferSize=Math.min(字节可用,maxBufferSize);
buffer=新字节[bufferSize];
//读取文件并将其写入表单。。。
bytesRead=fileInputStream.read(缓冲区,0,缓冲区大小);
而(字节读取>0){
写入(缓冲区,0,缓冲区大小);
bytesAvailable=fileInputStream.available();
bufferSize=Math.min(字节可用,maxBufferSize);
bytesRead=fileInputStream.read(缓冲区,0,缓冲区大小);
}
//发送文件数据后所需的多部分表单数据。。。
dos.writeBytes(lineEnd);
写字节(两个连字符+边界+两个连字符+行结束);
//基里姆电话
conn.setRequestMethod(“POST”);
conn.setRequestProperty(“连接”、“保持活动”);
conn.setRequestProperty(“ENCTYPE”、“多部分/表单数据”);
conn.setRequestProperty(“内容类型”、“多部分/表单数据;边界=“+boundary”);
conn.setRequestProperty(“电话”,mPhoneNumber);
dos=新的DataOutputStream(conn.getOutputStream());
写字节(两个连字符+边界+行结束);
writeBytes(“内容处理:表单数据;名称=\“phone\”文件名=\”“+mPhoneNumber+“\”“+lineEnd”);
dos.writeBytes(lineEnd);
bytesAvailable=fileInputStream.available();//创建最大大小的缓冲区
bufferSize=Math.min(字节可用,maxBufferSize);
buffer=新字节[bufferSize];
//读取文件并将其写入表单。。。
bytesRead=fileInputStream.read(缓冲区,0,缓冲区大小);
而(字节读取>0){
写入(缓冲区,0,缓冲区大小);
bytesAvailable=fileInputStream.available();
bufferSize=Math.min(字节可用,maxBufferSize);
bytesRead=fileInputStream.read(缓冲区,0,缓冲区大小);
}
//发送文件数据后所需的多部分表单数据。。。
dos.writeBytes(lineEnd);
写字节(两个连字符+边界+两个连字符+行结束);
//来自服务器的响应(代码和消息)
serverResponseCode=conn.getResponseCode();
字符串serverResponseMessage=conn.getResponseMessage();
Log.i(“uploadFile”,“HTTP响应为:“+serverResponseMessage+”:“+serverResponseCode”);
如果(服务器响应代码==200){
runOnUiThread(新的Runnable(){
公开募捐{
//tv.setText(“文件上传完成”);
Toast.makeText(Activity3.this,“文件上传完成”,Toast.LENGTH_SHORT.show();
}
});
}
//关闭溪流//
fileInputStream.close();
dos.flush();
dos.close();
}捕获(畸形)
pDialog.disclose();
例如printStackTrace();
Toast.makeText(Activity3.this,“MalformedURLException”,Toast.LENGTH_SHORT.show();
Log.e(“将文件上载到服务器”,“错误:+ex.getMessage(),ex”);
}捕获(例外e){
pDialog.disclose();
e、 printStackTrace();
Toast.makeText(Activity3.this,“异常:+e.getMessage(),Toast.LENGTH_SHORT).show();
Log.e(“上传文件到服务器异常”,“异常:+e.getMessage(),e”);
}
pDialog.disclose();
//返回服务器响应代码;
}
}
但它显示了错误:
爪哇