Struts2のアップデート(2.3⇒2.5)を行った影響で、
Swiftで実装したiOSアプリからのファイルアップロードができなくなってしまいました。
Client:iOS14.1
Server:開発環境(Windows10, Tomcat8, Struts2.5)
iPhoneから写真を撮影し、Zip化したファイルと付加情報をWebサーバへ転送する流れになっています。
サーバ側はEclipseでTomcatを起動しているため、ブレイクポイントを置いて確認したところ、
付加情報は取得できているのにファイルが取得できていませんでした。
同様の機能でWebページからのリクエストのものもありますが、
こちらはクライアント側の修正なしに正常に動作しています。
何か解消に直結することでなくても構いませんので、
お力を貸していただきたいです。
サーバ側
java
1@ParentPackage(value=AbstractAppAction .PARENT_PACKAGE) 2@Results ({ 3 @Result(name = UploadFileFromiOSAction .RESPONCE, value = "/WEB-INF/content/api/responce.jsp"), 4 @Result(name = UploadFileFromiOSAction .EMPTY, value = "/WEB-INF/content/api/empty.jsp") 5}) 6@Action(value="uploadFileFromiOS") 7public class UploadFileFromiOSAction extends AbstractAppAction { 8 9 public static final String RESPONCE = "responce"; 10 11 public String info1; 12 public String info2; 13 14 private File inputImg = null; 15 private String inputImgContentType = null; 16 private String inputImgFileName = null; 17 18 private String response; 19 20 @Override 21 public String subExecute() throws Exception { 22 23 if (inputImg == null) { 24 throw new DataAccessException("登録するファイルが見つかりません"); 25 } 26 27 ~~ 省略 ~~ 28 29 JSONObject resJson = new JSONObject(); 30 resJson.put("result1", result1); 31 resJson.put("result2", result2); 32 this.response = resJson.toString(); 33 34 return UploadFileFromiOSAction.RESPONCE; 35 } 36 37 public File getInputImg() { 38 return inputImg; 39 } 40 public void setInputImg(File inputImg) { 41 this.inputImg = inputImg; 42 } 43 44 public String getInputImgContentType() { 45 return inputImgContentType; 46 } 47 public void setInputImgContentType(String inputImgContentType) { 48 this.inputImgContentType = inputImgContentType; 49 } 50 51 public String getInputImgFileName() { 52 return inputImgFileName; 53 } 54 public void setInputImgFileName(String inputImgFileName) { 55 this.inputImgFileName = inputImgFileName; 56 } 57 58 public String getResponse() { 59 return response; 60 } 61 public void setResponse(String response) { 62 this.response = response; 63 } 64} 65
クライアント側
swift
1class FileUploadService : NSObject { 2 3 func execute(_ data:Data, info1: String, info2: String) -> Bool { 4 let method : String = "execute" 5 6 var str = ApplicationConfig.sharedInstance.uploadUrl + "?info1=" + info1+ "&info2=" + info2 7 8 let encodedStr = str.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) 9 let url = URL(string:encodedStr!) 10 11 let urlRequest : NSMutableURLRequest = NSMutableURLRequest() 12 13 if let u = url { 14 urlRequest.url = u 15 urlRequest.httpMethod = "POST" 16 urlRequest.timeoutInterval = 30.0 17 } 18 19 let uniqueId = ProcessInfo.processInfo.globallyUniqueString 20 let body: NSMutableData = NSMutableData() 21 var postData :String = String() 22 let boundary:String = "---------------------------(uniqueId)" 23 24 urlRequest.addValue("multipart/form-data; boundary=(boundary)", forHTTPHeaderField: "Content-Type") //(1) 25 26 postData += "--(boundary)\r\n" 27 postData += "Content-Disposition: form-data; name=\"inputImg\"; filename=\"test.zip\"\r\n" //(2) 28 29 postData += "Content-Type: zip\r\n\r\n" 30 body.append(postData.data(using: String.Encoding.utf8)!) 31 body.append(data) 32 33 postData = String() 34 postData += "\r\n" 35 postData += "\r\n--(boundary)--\r\n" 36 37 body.append(postData.data(using: String.Encoding.utf8)!) //(3) 38 39 urlRequest.httpBody = NSData(data:body as Data) as Data 40 41 let session = URLSession.shared 42 let task: URLSessionDataTask = session.dataTask(with: urlRequest as URLRequest, completionHandler: { data, request, error in 43 44 ~~ 省略 ~~ 45 }) 46 task.resume() 47 48 return true 49 } 50}
よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。