Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Revision as of 11:18, 25 July 2013 by hamishwillee (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

使用J2ME的HTTP Post方式之多段文件上傳

From Wiki
Jump to: navigation, search
WP Metro Icon Chinese.png
Article Metadata

文章
翻译:
User:Linux achi
最后由 hamishwillee 在 25 Jul 2013 编辑

這裡有個J2ME類別用來透過HTTP POST多段請求方式處理檔案上傳。

Contents

程式碼:HttpMultipartRequest類別

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.Hashtable;
 
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
 
public class HttpMultipartRequest
{
static final String BOUNDARY = "----------V2ymHFg03ehbqgZCaKO6jy";
 
byte[] postBytes = null;
String url = null;
 
public HttpMultipartRequest(String url, Hashtable params, String fileField, String fileName, String fileType, byte[] fileBytes) throws Exception
{
this.url = url;
 
String boundary = getBoundaryString();
 
String boundaryMessage = getBoundaryMessage(boundary, params, fileField, fileName, fileType);
 
String endBoundary = "\r\n--" + boundary + "--\r\n";
 
ByteArrayOutputStream bos = new ByteArrayOutputStream();
 
bos.write(boundaryMessage.getBytes());
 
bos.write(fileBytes);
 
bos.write(endBoundary.getBytes());
 
this.postBytes = bos.toByteArray();
 
bos.close();
}
 
String getBoundaryString()
{
return BOUNDARY;
}
 
String getBoundaryMessage(String boundary, Hashtable params, String fileField, String fileName, String fileType)
{
StringBuffer res = new StringBuffer("--").append(boundary).append("\r\n");
 
Enumeration keys = params.keys();
 
while(keys.hasMoreElements())
{
String key = (String)keys.nextElement();
String value = (String)params.get(key);
 
res.append("Content-Disposition: form-data; name=\"").append(key).append("\"\r\n")
.append("\r\n").append(value).append("\r\n")
.append("--").append(boundary).append("\r\n");
}
res.append("Content-Disposition: form-data; name=\"").append(fileField).append("\"; filename=\"").append(fileName).append("\"\r\n")
.append("Content-Type: ").append(fileType).append("\r\n\r\n");
 
return res.toString();
}
 
public byte[] send() throws Exception
{
HttpConnection hc = null;
 
InputStream is = null;
 
ByteArrayOutputStream bos = new ByteArrayOutputStream();
 
byte[] res = null;
 
try
{
hc = (HttpConnection) Connector.open(url);
 
hc.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + getBoundaryString());
 
hc.setRequestMethod(HttpConnection.POST);
 
OutputStream dout = hc.openOutputStream();
 
dout.write(postBytes);
 
dout.close();
 
int ch;
 
is = hc.openInputStream();
 
while ((ch = is.read()) != -1)
{
bos.write(ch);
}
res = bos.toByteArray();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
if(bos != null)
bos.close();
 
if(is != null)
is.close();
 
if(hc != null)
hc.close();
}
catch(Exception e2)
{
e2.printStackTrace();
}
}
return res;
}
}

範例使用

這裡有個程式碼片段用來透過HttpMultipartRequest類別來上傳一個檔案:

byte[] fileBytes = getFileBytes(); //retrieve file bytes with your own code
 
Hashtable params = new Hashtable();
params.put("custom_param", "param_value");
params.put("custom_param2", "param_value2");
 
HttpMultipartRequest req = new HttpMultipartRequest(
"http://www.server.com/uploadScript.php",
params,
"upload_field", "original_filename.png", "image/png", fileBytes
);
 
byte[] response = req.send();

伺服器範例程式碼(PHP)

這個PHP範例程式用來處理上傳,它不會真正儲存上傳檔案,只會顯示一些關於上傳檔案的大小及參數的訊息。

<?php
 
$filesize = filesize($_FILES['upload_field']['tmp_name']);
 
echo "The uploaded file size is " . $filesize . " bytes\n";
 
foreach($_POST as $key => $value)
{
echo "Parameter name: " . $key . ", value: " . $value . "\n";
}
 
?>

相关链接

This page was last modified on 25 July 2013, at 11:18.
64 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×