質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Struts 2

Apache Struts 2は、Apache Strutsプロジェクトにて開発されているオープンソースのJavaベースのWebアプリケーションフレームワークです。Sturts1に比べ、設定ファイルの削減、依存性の注入、POJO等の改善がなされています。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

1171閲覧

iOSアプリからWebアプリへのファイルアップロードでFileがnullになる

nok123

総合スコア11

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Struts 2

Apache Struts 2は、Apache Strutsプロジェクトにて開発されているオープンソースのJavaベースのWebアプリケーションフレームワークです。Sturts1に比べ、設定ファイルの削減、依存性の注入、POJO等の改善がなされています。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/11/18 14:12

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}

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

このソースコードだけだと答えようがありません。
問題点が「Fileがnullになる」ということですので、空のFileを送信しているのではないかと思います。

投稿2020/11/23 15:15

errolizer

総合スコア443

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問